私は、反復可能なもので一致する要素を数えるほとんどのpythonic方法からこのコードに遭遇しました
r = xrange(1, 10)
print sum(1 for v in r if v % 2 == 0) # 4
print sum(1 for v in r if v % 3 == 0) # 3
rは1回繰り返されます。そして、それは再び繰り返されます。イテレータが一度消費されたら、それは終わったので、もう一度繰り返すべきではないと思いました。
ジェネレータ式は1回だけ繰り返すことができます。
r = (7 * i for i in xrange(1, 10))
print sum(1 for v in r if v % 2 == 0) # 4
print sum(1 for v in r if v % 3 == 0) # 0
enumerate(L)も:
r = enumerate(mylist)
およびファイルオブジェクトも:
f = open(myfilename, 'r')
xrangeの動作が異なるのはなぜですか?