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 次 |
| 最近记录: |