【发布时间】:2021-12-30 07:40:09
【问题描述】:
代码如下:
def is_subsequence(a, b):
b = iter(b)
gen = ((i in b) for i in a)
print(gen)
for i in gen:
print(i)
return all(((i in b) for i in a))
res1 = is_subsequence([1, 3, 5], [1, 2, 3, 4, 5])
res2 = is_subsequence([1, 4, 3], [1, 2, 3, 4, 5])
结果是res1==False 和res2==False。显然res1 的结果不正确。
当我注释掉 for 循环打印时,res1==True 和 res2==False,这是正确的。
我很困惑。谁能解释一下原因?
【问题讨论】:
-
因为你在
for i in gen:...时已经消耗了迭代器b。如果您将每个生成器的迭代器分开,例如b, c = iter(b), iter(b)和return all(((i in c) ...)将正常工作。