Python предоставляет хороший метод для получения длины нетерпеливого, iterable, len(x)
. Но я не мог найти ничего подобного для ленивых итераций, представленных функциями и функциями генератора. Конечно, нетрудно написать что-то вроде:
def iterlen(x):
n = 0
try:
while True:
next(x)
n += 1
except StopIteration: pass
return n
Но я не могу избавиться от чувства, что я переоцениваю велосипед.
(Пока я печатал эту функцию, я подумал: может быть, нет такой функции, потому что она "уничтожает" ее аргумент. Однако не проблема для моего случая.)
P.S.: в отношении первых ответов - да, что-то вроде len(list(x))
тоже будет работать, но это значительно увеличивает использование памяти.
P.P.S.: повторная проверка... Не обращайте внимания на P.S., кажется, я ошибся, пытаясь это сделать, он отлично работает. Извините за неприятности.