Я пытаюсь оптимизировать свой код Python 2.7.x. Я собираюсь выполнить одну операцию внутри цикла for, возможно, миллионы раз, поэтому я хочу, чтобы она была как можно быстрее.Оптимизация кода Python для преобразования списка строк в целые числа и поплавки
Моя операция принимает список из 10 строк и преобразует их в 2 целых числа, за которыми следуют 8 поплавков.
Вот MWE из моих попыток:
import timeit
words = ["1"] * 10
start_time = timeit.default_timer()
for ii in range(1000000):
values = map(float, words)
values[0] = int(values[0])
values[1] = int(values[1])
print "1", timeit.default_timer() - start_time
start_time = timeit.default_timer()
for ii in range(1000000):
values = map(int, words[:2]) + map(float, words[2:])
print "2", timeit.default_timer() - start_time
start_time = timeit.default_timer()
local_map = map
for ii in range(1000000):
values = local_map(float, words)
values[0] = int(values[0])
values[1] = int(values[1])
print "3", timeit.default_timer() - start_time
1 2.86574220657
2 3.83825802803
3 2.86320781708
Первый блок кода является самым быстрым я сумел. Функция map
выглядит намного быстрее, чем использование списка. Но есть еще избыточность, потому что я сопоставляю все с плавающей точкой, а затем меняю первые два элемента на целые числа.
Есть ли что-то более быстрое, чем мой код?
Почему не делает функцию карты локальной, local_map = map
, улучшает скорость в третьем блоке кода?
на общем примечании, используя '% timeit', вероятно, лучше для измерения производительности ... – Julien
Вы связаны с Python 2? – Felk
@Felk yep Python 2.7.x – innisfree