Why does this not iterate?
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 )
Output:
DEBUG:root:d: ['1', '2']
DEBUG:root:[(0, '1'), (1, '2')]
DEBUG:root:['0']
DEBUG:root:[[]]
Docs:
- https://docs.python.org/3/reference/compound_stmts.html#for
- https://docs.python.org/3/library/functions.html#enumerate
Run online: http://goo.gl/75yuAd
Any iterator is "one-shot" in sense that, when it is fully executed, it becomes empty and can't be used anymore. When you called
logging.debug( list(e) )
, you have used it in the list() function and so exhausted it. So, the following attempt to use it infor
cycle gives nothing.With modified code when enumerate() is called again after this debug, the script behavior gets changed - it raises IndexError on
y[int(k)].append( v )
; I won't fix this for you but this is enough sign that cycle body begins being executed.