Диапазон (len (список)) или перечислить (список)?
Возможный дубликат:
Требуется только индекс: перечислять или (x) диапазон?
Какое из них будет считаться лучше/яснее/быстрее/больше "Pythonic"? Я не забочусь о содержании списка L
, насколько он длинный.
a = [f(n) for n, _ in enumerate(L)]
или
a = [f(n) for n in range(len(L))]
Если это имеет значение, функция f
также использует len(list)
.
Ответы
Ответ 1
Некоторые быстрые тайминги, похоже, дают второй вариант с использованием range()
небольшого края над enumerate()
:
timeit a = [f(n) for n, _ in enumerate(mlist)]
10000 loops, best of 3: 118 us per loop
timeit a = [f(n) for n in range(len(mlist))]
10000 loops, best of 3: 102 us per loop
и просто для удовольствия с помощью xrange()
(Python v2.7.2)
timeit a = [f(n) for n in xrange(len(mlist))]
10000 loops, best of 3: 99 us per loop
Сначала я хотел бы использовать читаемый код, а затем использовать xrange()
, если он доступен (т.е. Pre-Python v 3.x), а затем range()
и enumerate()
.
Ответ 2
Решение диапазона (x) выполняется быстрее, поскольку оно имеет меньше накладных расходов, поэтому я бы использовал это.
В Python 2.x используйте xrange
вместо range
, потому что xrange
использует меньше памяти, потому что он не создает временный список. В Python 3.x существует только range
, который является версией с меньшей памятью.
Ответ 3
Предполагая, что вы используете Python 2.x, если вы используете len()
, вы должны использовать xrange()
, так как это позволит избежать создания списка чисел в диапазоне.
И в этом случае я бы пошел с len()
, потому что вы используете индексы, а не элементы в списке.
Ответ 4
Я бы сказал, что, поскольку вы не используете атрибут "_" из функции enumarate, используйте диапазон, поскольку это более читаемо таким образом.