Skip to content

Commit 5291625

Browse files
committed
[GR-12612] itertools don't provide takewhile.
1 parent 0269ce3 commit 5291625

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

graalpython/lib-graalpython/itertools.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,3 +418,30 @@ def __next__(self):
418418
n = next(self.iterator)
419419
if not self.func(n):
420420
return n
421+
422+
class takewhile(object):
423+
"""Make an iterator that returns elements from the iterable as
424+
long as the predicate is true.
425+
426+
Equivalent to :
427+
428+
def takewhile(predicate, iterable):
429+
for x in iterable:
430+
if predicate(x):
431+
yield x
432+
else:
433+
break
434+
"""
435+
def __init__(self, predicate, iterable):
436+
self._predicate = predicate
437+
self._iter = iter(iterable)
438+
439+
def __iter__(self):
440+
return self
441+
442+
def __next__(self):
443+
value = next(self._iter)
444+
if not self._predicate(value):
445+
self._iter = iter([])
446+
raise StopIteration()
447+
return value

0 commit comments

Comments
 (0)