Why emumerated list is empty on 2nd round of print?

David Raymond David.Raymond at tomtom.com
Thu Sep 6 15:11:57 EDT 2018


The actual "enumerate" object is really just holding a current index and a reference to the original list. So if you alter the original list while you're iterating through it you'll see the changes. If you want a full copy then you can just wrap it with list()

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> numList = [2, 7, 22, 30, 1, 8]
>>> aList = enumerate(numList)
>>> aList.__next__()
(0, 2)
>>> numList[1] = 5
>>> aList.__next__()
(1, 5)
>>> aList2 = list(enumerate(numList))
>>> aList2
[(0, 2), (1, 5), (2, 22), (3, 30), (4, 1), (5, 8)]
>>> numList[3] = -12
>>> aList2
[(0, 2), (1, 5), (2, 22), (3, 30), (4, 1), (5, 8)]
>>> aList.__next__()
(2, 22)
>>> aList.__next__()
(3, -12)
>>> aList.__next__()
(4, 1)
>>> aList.__next__()
(5, 8)
>>> aList.__next__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>


-----Original Message-----
From: Python-list [mailto:python-list-bounces+david.raymond=tomtom.com at python.org] On Behalf Of Viet Nguyen via Python-list
Sent: Thursday, September 06, 2018 2:50 PM
To: python-list at python.org
Subject: Re: Why emumerated list is empty on 2nd round of print?

On Thursday, September 6, 2018 at 10:34:19 AM UTC-7, Chris Angelico wrote:
> On Fri, Sep 7, 2018 at 3:26 AM, Viet Nguyen via Python-list
> <python-list at python.org> wrote:
> >>>> numList
> > [2, 7, 22, 30, 1, 8]
> >
> >>>> aList = enumerate(numList)
> >
> >>>> for i,j in aList:print(i,j)
> >
> > 0 2
> > 1 7
> > 2 22
> > 3 30
> > 4 1
> > 5 8
> >
> >>>> for i,j in aList:print(i,j)
> >
> >>>>
> 
> Because it's not an enumerated list, it's an enumerated iterator.
> Generally, you'll just use that directly in the loop:
> 
> for i, value in enumerate(numbers):
> 
> There's generally no need to hang onto it from one loop to another.
> 
> ChrisA

Thanks ChrisA. If I do this "aList = enumerate(numList)", isn't it stored permanently in aList now?  I see your point to use it directly, but just in case I do need to hang onto it from one loop to another, then how is that done?   Anyway I think I'm ok and I got what I need for now.
-- 
https://mail.python.org/mailman/listinfo/python-list


More information about the Python-list mailing list