OSDir


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


On Thursday, September 6, 2018 at 12:12:20 PM UTC-7, David Raymond wrote:
> 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

Very clear and good examples!  Thank you.