Python 奇怪的答案(具有计数功能的元组和列表)
python 201
原文标题 :Python Weird Answer (Tuples and List with count function)
这是下面给出的代码。
k = [1,8,15]
g = (x for x in k if k.count(x)>0)
k = [2,8,22]
print(list(g))
我得到的输出是 [8] 但它应该是 [1,8,15],对吧?因为每个元素至少出现一次。
对答案有任何合理的解释吗?
回复
我来回复-
user2357112 supports Monica 评论
那是生成器表达式。它创建了一个生成器,而不是一个元组。
在 genexp 创建时,只计算生成器表达式的一部分。就是这部分:
g = (x for x in k if k.count(x)>0) # ^
其他一切,包括这部分:
g = (x for x in k if k.count(x)>0) # ^
被懒惰地评估。
这意味着你循环的
k
是原始的k
,但k
你调用的count
on是新的k
。2年前 -
Shawn Chang 评论
这是通过在生成器表达式中打印
x
和k
来查看哪个k
使用原始/修改列表的技巧:1st
k
指的是原始列表:>>> k = [1,8,15] >>> g = (x for x in k if (print(x) == None and k.count(x)>0)) >>> k = [2,8,22] >>> list(g) 1 8 15
第2
k
指修改后的列表:>>> k = [1,8,15] >>> g = (x for x in k if (print(k) == None and k.count(x)>0)) >>> k = [2,8,22] >>> list(g) [2, 8, 22] [2, 8, 22] [2, 8, 22]
2年前