Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
20 строки
601 B
Python
20 строки
601 B
Python
from collections.abc import Iterable, Iterator
|
|
|
|
class _ZipSentinel:
|
|
pass
|
|
|
|
_ZIP_SENTINEL: _ZipSentinel = _ZipSentinel()
|
|
|
|
def zip_n(*iterables: Iterable, n: int) -> Iterator[tuple]:
|
|
n = max(n, 0)
|
|
if len(iterables) == 0:
|
|
for i in range(n):
|
|
yield ()
|
|
return
|
|
iterators = list(map(iter, iterables))
|
|
for i in range(n):
|
|
tup = tuple(next(it, _ZIP_SENTINEL) for it in iterators)
|
|
if any(isinstance(v, _ZipSentinel) for v in tup):
|
|
raise ValueError(f"at least one of iterables was exhausted in {i + 1} < {n} iterations")
|
|
yield tup
|