gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:56:24 27 4
gpt4 key购买 nike

我一直在试图理解senderle对此问题的回答:- Cross product of sets using recursion

我发现处理 for 循环然后将它们转换为列表推导式更简单。我正在努力解决这个问题,因为它有两个列表理解,所以我认为我们需要嵌套循环。 s该函数返回两个列表的笛卡尔积。

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 表达式移到末尾。这就是改变顺序的部分。您可以将列表理解转换为生成器:

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

关于python - 如何将这个列表理解扩展到 for 循环,以理解这个递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37005843/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com