У меня есть этот код:Обратный список при создании
def iterate_through_list_1(arr):
lala = None
for i in range(len(arr))[::-1]:
lala = i
def iterate_through_list_2(arr):
lala = None
for i in range(len(arr), 0, -1):
lala = i
Логически, перебирая список, созданный range()
в обратном порядке должно быть более эффективным, чем создание списка с range()
и реверсирования его потом с [::-1]
. Но cProfile говорит мне, что функция iterate_through_list_1
работает быстрее.
Я использовал python-3. И здесь вы можете увидеть результат профилирования на двух идентичных массивах с 100000000 элементами в них.
ncalls tottime percall cumtime percall filename:lineno(function)
1 5.029 5.029 5.029 5.029 bs.py:24(iterate_throgh_list_2)
1 4.842 4.842 4.842 4.842 bs.py:19(iterate_throgh_list_1)
Что произошло под кусочками Python при создании списка?
Python 2.x или 3.x? Каковы цифры, какая разница во времени? Как вы его протестировали? Вы использовали несколько итераций? –
Вторая функция * много * более очевидна. Предпочитайте это, если нет * массивного * преимущества - и это имеет значение для вашего приложения. –
@MartinBonner, если это прекрасно, что относительно 'для obj в обратном (arr)'? Или, если вам действительно нужны указатели, 'для idx, obj в перечислении (reverse (arr))'? –