Python奇怪的答案(带有计数函数的元组和列表)

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],对吗?因为每个元素至少出现一次。

对答案有什么合理的解释吗?

use*_*ica 9

这是一个生成器表达式。它创建一个生成器,而不是一个元组。

生成器表达式的确切一部分是在 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