Продолжительность вывода генератора [дубликат]

Извлеките свою папку еще раз в папку с более коротким именем. И используйте 7-zip для извлечения папки, так как могут возникнуть некоторые проблемы, связанные с извлечением.

117
задан 25 December 2008 в 19:12
поделиться

2 ответа

Нет того, потому что Вы не можете сделать этого в общем случае - что, если у Вас есть ленивый бесконечный генератор? Например:

def fib():
    a, b = 0, 1
    while True:
        a, b = b, a + b
        yield a

Это никогда не завершается, но генерирует Числа Фибоначчи. Можно получить столько Чисел Фибоначчи, сколько Вы хотите путем вызова next().

, Если действительно необходимо знать количество объектов, существует, тогда Вы не можете выполнить итерации через них линейно одного времени так или иначе, поэтому просто использовать различную структуру данных, такую как обычный список.

32
ответ дан Smi 5 November 2019 в 08:46
поделиться

Можно использовать, перечисляют (), чтобы циклично выполниться через сгенерированный поток данных, затем возвратить последнее число - количество объектов.

я пытался использовать itertools.count () с itertools.izip (), но никакая удача. Это - лучший/самый короткий ответ, который я придумал:

#!/usr/bin/python

import itertools

def func():
    for i in 'yummy beer':
        yield i

def icount(ifunc):
    size = -1 # for the case of an empty iterator
    for size, _ in enumerate(ifunc()):
        pass
    return size + 1

print list(func())
print 'icount', icount(func)

# ['y', 'u', 'm', 'm', 'y', ' ', 'b', 'e', 'e', 'r']
# icount 10

решением Kamil Kisiel является путь лучше:

def count_iterable(i):
    return sum(1 for e in i)
7
ответ дан glglgl 5 November 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: