迭代器的成员资格测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器的成员资格测试相关的知识,希望对你有一定的参考价值。
有人可以在我的代码的最后3行中向我解释成员资格测试的行为,为什么它是假的?为什么迭代器和迭代器的成员资格测试不同?
c = [1,2,3,4,5,6,7,8,9,10,11,12]
print(3 in c) # True
print(3 in c) # True
d = iter(c)
print(2 in d) # True
print(4 in d) # True
print(4 in d) # False ???
print(6 in d) # False ???
print(10 in d) # False ???
答案
迭代器在使用时会被消耗掉。我会解释你的例子:
>>> c = [1,2,3,4,5,6,7,8,9,10,11,12]
>>> d = iter(c)
>>> print(list(d))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> print(list(d))
[]
您可以将迭代器d
视为指向列表中第一项的指针。读取其值后,它指向第二个项目。当它到达结尾时,它指向一个空列表。
另见:
>>> c = [1,2,3,4,5,6,7,8,9,10,11,12]
>>> d = iter(c)
>>> print(next(d))
1
>>> print(next(d))
2
>>> print(list(d))
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
检查是否有内容也消耗其内容:
>>> c = [1,2,3,4,5,6,7,8,9,10,11,12]
>>> d = iter(c)
>>> 4 in d
True
>>> print(list(d))
[5, 6, 7, 8, 9, 10, 11, 12]
另一答案
因为迭代器有一个状态 - 在你的情况下是一个指向当前元素的指针。
两次连续检查之间的区别
print(4 in d) # True
print(4 in d) # False ???
是迭代器的状态。首先检查迭代器的指针在4之后设置为下一个元素。
以上是关于迭代器的成员资格测试的主要内容,如果未能解决你的问题,请参考以下文章