Получение количества элементов в итераторе в Python - PullRequest
107 голосов
/ 27 июля 2010

Есть ли эффективный способ узнать, сколько элементов в итераторе в Python, в общем, без перебора каждого и подсчета?

Ответы [ 15 ]

3 голосов
/ 27 июля 2010

Существует два способа получить длину «чего-то» на компьютере.

Первый способ - сохранить счетчик - для его изменения требуется все, что касается файла / данных (или классаэто только выставляет интерфейсы - но это сводится к тому же самому.)

0 голосов
/ 04 августа 2017

Несмотря на то, что в целом невозможно выполнить то, что было задано, все равно часто бывает полезно подсчитать, сколько элементов было итерировано по после итерирования по ним. Для этого вы можете использовать jaraco.itertools.Counter или аналогичный. Вот пример использования Python 3 и rwt для загрузки пакета.

$ rwt -q jaraco.itertools -- -q
>>> import jaraco.itertools
>>> items = jaraco.itertools.Counter(range(100))
>>> _ = list(counted)
>>> items.count
100
>>> import random
>>> def gen(n):
...     for i in range(n):
...         if random.randint(0, 1) == 0:
...             yield i
... 
>>> items = jaraco.itertools.Counter(gen(100))
>>> _ = list(counted)
>>> items.count
48
0 голосов
/ 24 февраля 2016
def count_iter(iter):
    sum = 0
    for _ in iter: sum += 1
    return sum
0 голосов
/ 08 ноября 2013

Это противоречит самому определению итератора, который является указателем на объект, плюс информация о том, как добраться до следующего объекта.

Итератор не знает, сколько еще раз он сможет выполнить итерацию до его завершения. Это может быть бесконечно, поэтому бесконечность может быть вашим ответом.

0 голосов
/ 27 июля 2010

Обычная практика - помещать информацию такого типа в заголовок файла, а pysam предоставляет вам доступ к этому.Я не знаю формат, но вы проверили API?

Как уже говорили другие, вы не можете узнать длину от итератора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...