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
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