This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: range_iterator doesn't have length, leads to surprised result
Type: Stage: resolved
Components: Interpreter Core Versions: Python 3.7, Python 2.7
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: r.david.murray, yegle
Priority: normal Keywords:

Created on 2017-11-17 23:11 by yegle, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (3)
msg306458 - (view) Author: yegle (yegle) Date: 2017-11-17 23:11
This also affects xrange in Python2, so I chose the affected version as python27.

range object (and xrange in Python2) has __len__(), but the range_iterator object created from __reversed__() doesn't have __len__.

Python2:
>>> x = xrange(10)
>>> len(x)
10
>>> reversed(x)
<rangeiterator object at 0x7f86065684e0>
>>> y = reversed(x)
>>> len(y)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'rangeiterator' has no len()

Python3.6
>>> x = range(10)
>>> len(x)
10
>>> len(reversed(x))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'range_iterator' has no len()
msg306462 - (view) Author: yegle (yegle) Date: 2017-11-18 00:07
Hmm I think this also applies to list_listiterator. In general I'd expect these to be true:

l = [1,2,3]
r = range(3)

assert len(l) == len(reversed(l))
assert len(r) == len(reversed(r))
msg306465 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2017-11-18 01:20
By design, iterators do not have a length (see msg248496).
History
Date User Action Args
2022-04-11 14:58:54adminsetgithub: 76246
2017-11-18 01:20:38r.david.murraysetstatus: open -> closed

nosy: + r.david.murray
messages: + msg306465

resolution: not a bug
stage: resolved
2017-11-18 00:07:59yeglesetmessages: + msg306462
2017-11-17 23:46:55vstinnersetversions: + Python 3.7
2017-11-17 23:11:12yeglecreate