5

If I have an enumerate object x, why does doing the following:

dict(x)

clear all the items in the enumerate sequence?

cockadoodledo
  • 371
  • 1
  • 3
  • 10
  • 4
    Please clarify what you mean by enumerate, dict seems to work file for me with it: `dict(enumerate(['a', 'b', 'c'])) = {0: 'a', 1: 'b', 2: 'c'}` – Michal Čihař Apr 26 '10 at 13:33

1 Answers1

19

enumerate creates an iterator. A iterator is a python object that only knows about the current item of a sequence and how to get the next, but there is no way to restart it. Therefore, once you have used a iterator in a loop, it cannot give you any more items and appears to be empty.

If you want to create a real sequence from a iterator you can call list on it.

stuff = range(5,0,-1)
it = enumerate(stuff)
print dict(it), dict(it) # first consumes all items, so there are none left for the 2nd call

seq = list(enumerate(stuff)) # creates a list of all the items
print dict(seq), dict(seq) # you can use it as often as you want
Jochen Ritzel
  • 104,512
  • 31
  • 200
  • 194