为什么不迭代?
import logging
logging.basicConfig(level=logging.DEBUG)
x = []
y = [[] for n in range(0, 1)]
linedata = ["0","1","2"]
x.append( linedata[0] )
d = linedata[1:]
logging.debug( "d: {}".format(d) )
e = enumerate(d)
logging.debug( list(e) )
for k, v in e:
logging.debug( "k:{} v:{}".format( k, v ) )
y[int(k)].append( v )
#for d in [(0,1)]:
#logging.debug( "k:{} v:{}".format( d[0], d[1] ) )
#y[d[0]].append( d[1] )
logging.debug( x )
logging.debug( y )
输出:
DEBUG:root:d: ['1', '2']
DEBUG:root:[(0, '1'), (1, '2')]
DEBUG:root:['0']
DEBUG:root:[[]]
文档:
在线运行:http://goo.gl/75yuAd
答案 0 :(得分:3)
因为enumerate
返回迭代器:
>>> e = enumerate(range(4))
>>> list(e)
[(0, 0), (1, 1), (2, 2), (3, 3)]
>>> list(e)
[]
到达终点后,e.next()
会引发StopIteration
例外:
>>> e.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
因此,您无法在e
上迭代两次。您将不得不重新创建迭代器。
答案 1 :(得分:2)
任何迭代器都是&#34;一次性&#34;在某种意义上说,当它完全执行时,它变空了,不能再使用了。当你调用logging.debug( list(e) )
时,你已经在list()函数中使用它,因此用尽它。因此,以下尝试在for
周期中使用它不会产生任何效果。
使用修改后的代码,在此调试后再次调用enumerate()时,脚本行为会发生变化 - 它会在y[int(k)].append( v )
上引发IndexError;我不会为你解决这个问题,但这足以说明循环体开始被执行了。
答案 2 :(得分:1)
这一行:
logging.debug( list(e) )
消耗迭代器,所以当你到达时:
for k, v in e:
# ...
e
已经用尽。
答案 3 :(得分:0)
试试这个:
e = list(enumerate(d))