kkk*_*kv_ 2 python iterator in-operator
我有这个:
>>> 1 in (i for i in range(0, 5))
True
>>> 2 in (i for i in range(0, 5))
True
Run Code Online (Sandbox Code Playgroud)
之后:
>>> gen = (i for i in range(0, 5))
>>> 1 in gen
True
>>> 3 in gen
True
>>> 2 in gen
False
Run Code Online (Sandbox Code Playgroud)
关键字是否in
有效:
3 in gen
Run Code Online (Sandbox Code Playgroud)
等于:
j = 3
for i in gen:
if i == j:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
但在for循环之后,请勿再次将迭代器重置为FIRST.
是对的吗?
生成器在产生值时保持上下文.所以,当你这样做的时候
1 in gen
Run Code Online (Sandbox Code Playgroud)
它将开始迭代,当它到达时1
,它返回True
,但当前状态为1
.接下来,当你这样做时3 in gen
,它会迭代直到3
并产生True
.然后当你这样做
2 in gen
Run Code Online (Sandbox Code Playgroud)
它开始迭代3
,而不是从头开始.这就是你得到的原因False
.
在你的程序中,
j = 3
for i in gen:
if i == j:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
如果i
不相等j
,它会立即返回False
.相反,它可以被宽泛地理解为,
return any(i == j for j in gen)
Run Code Online (Sandbox Code Playgroud)
any
迭代生成器,直到任何项符合条件.如果没有任何项目匹配,它将耗尽发电机并将返回False
.
归档时间: |
|
查看次数: |
111 次 |
最近记录: |