Подтвердить что ты не робот

Python: содержат ли списки Python счетчик для len() или он рассчитывает на каждый вызов?

Если я продолжаю вызывать len() в очень длинном списке, я теряю время или не задерживаю int count в фоновом режиме?

4b9b3361

Ответ 1

Не волнуйтесь: конечно, это экономит счет, и поэтому len() в списках - довольно дешевая операция. То же самое верно для строк, словарей и наборов, кстати!

Ответ 4

Напишите свою программу, чтобы она оптимизировалась для ясности и легко поддерживалась. Является ли ваша программа более понятной с вызовом len(foo)? Затем сделайте это.

Вы беспокоитесь о времени? Используйте timeit модуль в стандартной библиотеке, чтобы измерить время и посмотреть, значимо ли это в вашем коде.

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

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

Ответ 5

Ответ на этот вопрос (len is O (1)), но вот как вы можете проверить сами:

$ python -m timeit -s "l = range(10)" "len(l)"
10000000 loops, best of 3: 0.119 usec per loop
$ python -m timeit -s "l = range(1000000)" "len(l)"
10000000 loops, best of 3: 0.131 usec per loop

Да, не совсем медленнее.

Ответ 6

Список "Python" Python на самом деле представляет собой масштабируемый массив, а не связанный список, поэтому он сохраняет размер где-то.

Ответ 7

Он должен хранить длину где-то, поэтому вы не рассчитываете количество элементов каждый раз.