list() strange behaviour

jak nospam at please.ty
Sun Jan 24 04:49:34 EST 2021


Il 20/12/2020 21:00, danilob ha scritto:
> Hi,
> I'm an absolute beginner in Python (and in English too ;-)
> Running this code:
>>> --------------
> # Python 3.9.0
>> a = [[1, 2, 0, 3, 0],
>      [0, 4, 5, 0, 6],
>      [7, 0, 8, 0, 9],
>      [2, 3, 0, 0, 1],
>      [0, 0, 1, 8, 0]]
>>> b = ((x[0] for x in a))
>> print(list(b))
> print(list(b))
> ---------------
>>> I get this output:
>> [1, 0, 7, 2, 0]
> []
>>> I don't know why the second print() output shows an empty list.
> Is it possible that the first print() call might have changed the value 
> of "b"?
>> Thank you in advance.

You should see a generator as a container emptying while you are reading 
it, so you should recreate it every time:
################################
# Python 3.9.0
a = [[1, 2, 0, 3, 0],
 [0, 4, 5, 0, 6],
 [7, 0, 8, 0, 9],
 [2, 3, 0, 0, 1],
 [0, 0, 1, 8, 0]]
b = lambda : (x[0] for x in a)
print(list(b()))
print(list(b()))
output:
[1, 0, 7, 2, 0]
[1, 0, 7, 2, 0]
################################


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /