如何将这个列表理解扩展到for循环中,以理解这个递归函数?

2024-04-25 12:49:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在试图理解森德勒对这个问题的回答问题:Cross product of sets using recursion

我发现更简单的方法是遍历for循环,然后将它们转换为列表理解。我正在努力解决这个问题,因为它有两个列表理解,所以我认为我们需要嵌套循环。函数返回两个列表的笛卡尔积。你知道吗

def product(*seqs):
    if not seqs:
        return [[]]
    else:
        return [[x] + p for x in seqs[0] for p in product(*seqs[1:])]
# working example:        
x = [1, 2], [3, 4]
print(product(*x))
# gives: [[1, 3], [1, 4], [2, 3], [2, 4]]

如何重写product()函数来扩展列表理解?你知道吗


Tags: of方法函数in列表forreturndef
1条回答
网友
1楼 · 发布于 2024-04-25 12:49:58

你应该按照同样的顺序写循环。诀窍是将开始的[x] + p表达式移到末尾。那是改变顺序的部分。您可以将列表转换为生成器:

for x in seqs[0]:
    for p in product(*seqs[1:]):
        yield [x] + p

这将改变product()的返回类型。如果您希望它返回列表而不是生成器,那么它看起来很相似,只是需要一些额外的簿记。你知道吗

l = []

for x in seqs[0]:
    for p in product(*seqs[1:]):
        l.append([x] + p)

return l

相关问题 更多 >