Там какой-либо встроенный путь состоит в том, чтобы получить длину повторяемого в Python?

47
задан Claudiu 24 December 2008 в 07:53
поделиться

5 ответов

За исключением итерации через повторяемое и подсчета количества повторений, нет. Это - то, что делает его повторяемым и не списком. Это не действительно даже определенная для Python проблема. Посмотрите на классическую структуру данных связанного списка. Нахождение длины является O (n) операция, которая включает итерацию целого списка для нахождения числа элементов.

Как mcrute упомянутый выше, можно, вероятно, уменьшить функцию до:

def count_iterable(i):
    return sum(1 for e in i)

, Конечно, при определении собственного повторяемого объекта можно всегда реализовывать __len__ сами и проводить подсчет элемента где-нибудь.

65
ответ дан Kamil Kisiel 7 November 2019 в 23:05
поделиться

При необходимости в количестве строк, можно сделать это, я не знаю ни о каком лучшем способе сделать это:

line_count = sum(1 for line in open("yourfile.txt"))
19
ответ дан mcrute 7 November 2019 в 23:05
поделиться

Абсолютно не, по простой причине, что iterables, как гарантируют, не будут конечны.

Рассматривают эту совершенно легальную функцию генератора:

def forever():
    while True:
        yield "I will run forever"

Попытка вычислить длину этой функции с len([x for x in forever()]) не будет ясно работать.

, Поскольку Вы отметили, большая часть цели итераторов/генераторов состоит в том, чтобы быть в состоянии работать над большим набором данных, не загружая все это в память. То, что Вы не можете получить непосредственную длину, нужно считать компромиссом.

8
ответ дан Triptych 7 November 2019 в 23:05
поделиться

Я использовал это переопределение в течение некоторого времени теперь:

def len(thingy):
    try:
        return thingy.__len__()
    except AttributeError:
        return sum(1 for item in iter(thingy))
11
ответ дан ttepasse 7 November 2019 в 23:05
поделиться

Мы будем, если Вы будете думать об этом, как Вы предлагаете, чтобы Вы нашли количество строк в файле, не читая целый файл для новых строк? Несомненно, можно найти размер файла, и если Вы можете gurantee, что длина строки является x, можно получить количество строк в файле. Но если у Вас нет некоторого ограничения, мне не удается видеть, как это может работать вообще. Кроме того, так как iterables может быть бесконечно длинным...

0
ответ дан Nikron 7 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

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