On 1 Sep 2023, at 19:15, Pierre Fortin via Python-list <python-list@python.org> wrote:
Hi,
reversed() results are fine until iterated over, after which the
results are no longer available. This was discovered after using
something like this:
rev = reversed( sorted( list ) )
sr = sum( 1 for _ in rev )
# rev is now destroyed
So reversed() results can only be iterated once unlike sorted(), etc...
Script to illustrate the issue:
/tmp/rev:
orig = [ 'x', 'a', 'y', 'b', 'z', 'c' ]
co = sum( 1 for _ in orig )
print( 'orig', orig, co )
# reversing
rev = reversed(orig)
print( 'before iteration:', [ x for x in rev ] )
# list comprehension was an iteration over 'rev'
print( 'after iteration:', [ x for x in rev ] )
# how this was discovered...
orig = [ 'x', 'a', 'y', 'b', 'z', 'c' ]
rev = reversed(orig)
cr = sum( 1 for _ in rev )
print( 'after sum():', [ x for x in rev ] )
which produces:
$ python /tmp/rev
orig ['x', 'a', 'y', 'b', 'z', 'c'] 6
before iteration: ['c', 'z', 'b', 'y', 'a', 'x']
after iteration: []
after sum(): []
Regards,
Pierre
--
https://mail.python.org/mailman/listinfo/python-list
Hi,
reversed() results are fine until iterated over, after which the
results are no longer available. This was discovered after using
something like this:
rev = reversed( sorted( list ) )
sr = sum( 1 for _ in rev )
# rev is now destroyed
So reversed() results can only be iterated once unlike sorted(), etc...
<class 'list_reverseiterator'>l1 = [1, 2, 3]
rev = reversed( sorted( l1 ) )
type(rev)
Hi,
reversed() results are fine until iterated over, after which the
results are no longer available. This was discovered after using
something like this:
rev = reversed( sorted( list ) )
sr = sum( 1 for _ in rev )
# rev is now destroyed
So reversed() results can only be iterated once unlike sorted(), etc...
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 546 |
Nodes: | 16 (2 / 14) |
Uptime: | 48:25:46 |
Calls: | 10,397 |
Calls today: | 5 |
Files: | 14,066 |
Messages: | 6,417,283 |
Posted today: | 1 |