Не так давно меня спросили - как бы ты прочитал список в Python в обратном порядке? Я предположил, что самым естественным образом будет просто выборка из списка по индексу от максимального (равного len(x) - 1) в порядке уменьшения. Сегодня я решил проверить варианты с подсчетом производительности. Python 2.7.4 x64, 8 Гб RAM, AMD Phenom II X4 960T, 3.00 GHz.
Итак, создаем список из ста миллионов записей и проходим по нему разными способами.
big_list = range(100000000)
big_list_len = len(big_list)
# Прямой перебор, самый быстрый и естественный: 10.3 sec
for item in big_list:
a = item
# Перебор с выборкой по индексу в прямом порядке: 12.8 sec
for num in xrange(big_list_len):
a = big_list[num]
# А теперь в обратном порядке: 12.7 sec
for num in xrange(big_list_len-1, 0, -1):
a = big_list[num]
# И наконец, используем встроенную функцию reversed: 11.9 sec
for item in reversed(big_list):
a = item
Выводы очевидны. Самый быстрый способ взять данные в обратном порядке - использовать reversed и прямой перебор. Выборка по индексу - не намного, но медленнее.
Комментариев нет:
Отправить комментарий