Диапазон (len(список)) или перечислить (список)?
Возможный дубликат:
Требуется только индекс: перечислить или (х) диапазон?
Что из этого будет считаться лучше / понятнее / быстрее / более "питоническим"? Меня не волнует содержание списка L
только сколько времени.
a = [f(n) for n, _ in enumerate(L)]
или же
a = [f(n) for n in range(len(L))]
Если это имеет какое-то значение, функция f
использует len(list)
также.
4 ответа
Некоторые быстрые прогоны по времени дают второй вариант, используя 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()
,
Решение для диапазона (x) быстрее, потому что у него меньше накладных расходов, поэтому я бы использовал это.
В Python 2.x используйте xrange
вместо range
, так как xrange
использует меньше памяти, потому что это не создает временный список. В Python 3.x есть только range
, который является версией с меньшим объемом памяти.
Я бы сказал, что, поскольку вы не используете атрибут "_" из функции enumarate, используйте диапазон, так как он более читабелен.
Предполагая, что вы используете Python 2.x, если вы используете len()
, вы должны использовать xrange()
так как это позволит избежать создания списка чисел в диапазоне.
И в этом случае я бы пошел с len()
потому что вы используете индексы, а не элементы в списке.