python专家的问题:用生成器调用时,代码不起作用
||
我有一个小片段,它无法以无法解释的方式工作。
目的是生成两个或更多序列的所有组合。
当使用列表调用时,它起作用,但是当使用生成器调用时,它不起作用。
def comb(seqs):
if seqs:
for item in seqs[0]:
for rest in comb(seqs[1:]):
yield [item] + rest
else:
yield []
if __name__==\"__main__\":
x=[1,2]
y=[3,4]
print list(comb([x,y])) # prints [[1, 3], [1, 4], [2, 3], [2, 4]]
def gen1(): yield 1; yield 2
def gen2(): yield 3; yield 4
x=gen1()
y=gen2()
print list(comb([x,y])) # prints [[1, 3], [1, 4] WHY ????
没有找到相关结果
已邀请:
4 个回复
羔磺
当您到达
的第二个元素时,您将进行递归调用以迭代
的元素。问题在于您在上一个递归调用中已经遍历了
,因此不会产生任何项。
眠缝
生成器依赖于能够遍历第二个及以后的序列,因此它会多次传递,因此如果这些序列实际上是生成器,则将无法工作。
脾萌
号拳藐孔妇