Fix iter_index() to work with lists which do not support stop=None. (gh-109306)

This commit is contained in:
Raymond Hettinger 2023-09-12 04:04:28 +02:00 committed by GitHub
parent 7dedfd36dc
commit f2a55fecd0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 0 deletions

View File

@ -877,6 +877,7 @@ which incur interpreter overhead.
yield i
else:
# Fast path for sequences
stop = len(iterable) if stop is None else stop
i = start - 1
try:
while True:
@ -1345,6 +1346,16 @@ The following recipes have a more mathematical flavor:
Traceback (most recent call last):
...
ValueError
>>> # Verify that both paths can find identical NaN values
>>> x = float('NaN')
>>> y = float('NaN')
>>> list(iter_index([0, x, x, y, 0], x))
[1, 2]
>>> list(iter_index(iter([0, x, x, y, 0]), x))
[1, 2]
>>> # Test list input. Lists do not support None for the stop argument
>>> list(iter_index(list('AABCADEAF'), 'A'))
[0, 1, 4, 7]
>>> list(sieve(30))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]