San*_*tsz 9 python iterator python-3.7
这是下面给出的代码。
k = [1, 8, 15]
g = (x for x in k if k.count(x) > 0)
k = [2, 8, 22]
print(list(g))
Run Code Online (Sandbox Code Playgroud)
我得到的输出为 [8],但它应该是 [1,8,15],对吗?因为每个元素至少出现一次。
对答案有什么合理的解释吗?
这是一个生成器表达式。它创建一个生成器,而不是一个元组。
生成器表达式的确切一部分是在 genexp 创建时计算的。就是这一部分:
g = (x for x in k if k.count(x)>0)
# ^
Run Code Online (Sandbox Code Playgroud)
其他一切,包括这部分:
g = (x for x in k if k.count(x)>0)
# ^
Run Code Online (Sandbox Code Playgroud)
被懒惰地评估。
这意味着k您正在循环的是原始的k,但k您正在调用count的是新的k。