mirror of https://github.com/python/cpython
gh-102088 Optimize iter_index itertools recipe (GH-102360)
This commit is contained in:
parent
2f62a5da94
commit
eaae563b68
|
@ -886,9 +886,12 @@ which incur interpreter overhead.
|
|||
except AttributeError:
|
||||
# Slow path for general iterables
|
||||
it = islice(iterable, start, None)
|
||||
for i, element in enumerate(it, start):
|
||||
if element is value or element == value:
|
||||
yield i
|
||||
i = start - 1
|
||||
try:
|
||||
while True:
|
||||
yield (i := i + operator.indexOf(it, value) + 1)
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
# Fast path for sequences
|
||||
i = start - 1
|
||||
|
|
|
@ -208,6 +208,9 @@ class OperatorTestCase:
|
|||
nan = float("nan")
|
||||
self.assertEqual(operator.indexOf([nan, nan, 21], nan), 0)
|
||||
self.assertEqual(operator.indexOf([{}, 1, {}, 2], {}), 0)
|
||||
it = iter('leave the iterator at exactly the position after the match')
|
||||
self.assertEqual(operator.indexOf(it, 'a'), 2)
|
||||
self.assertEqual(next(it), 'v')
|
||||
|
||||
def test_invert(self):
|
||||
operator = self.module
|
||||
|
|
Loading…
Reference in New Issue