我一直在试图理解森德勒对这个问题的回答问题: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()
函数来扩展列表理解?你知道吗
你应该按照同样的顺序写循环。诀窍是将开始的
[x] + p
表达式移到末尾。那是改变顺序的部分。您可以将列表转换为生成器:这将改变
product()
的返回类型。如果您希望它返回列表而不是生成器,那么它看起来很相似,只是需要一些额外的簿记。你知道吗相关问题 更多 >
编程相关推荐