xor*_*yst 6 python performance tuples list
我有一些(少数)项目的清单,例如:
my_list = [1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)
我有一个索引元组,例如:
indexes = (1,5,9)
Run Code Online (Sandbox Code Playgroud)
我想要列表中值的元组,例如:
tuple(my_list[x] for x in indexes)
Run Code Online (Sandbox Code Playgroud)
但事实证明这很慢(当运行很多次).
我运行的每个列表的索引元组都没有改变 - 所以有更快的方法吗?
我正在使用Python 2.5,到目前为止我得到了这些惊人的结果:
python -m timeit -s "indexes = (1,5,9); l = [1,2,3,4,5,6,7,8,9,10]" "tuple(l[i] for i in indexes)"
100000 loops, best of 3: 3.02 usec per loop
python -m timeit -s "indexes = (1,5,9); l = [1,2,3,4,5,6,7,8,9,10]" "tuple([l[i] for i in indexes])"
1000000 loops, best of 3: 0.707 usec per loop
Run Code Online (Sandbox Code Playgroud)
这是一个异常,还是列表理解真的比生成器表达式好得多?
小智 7
operator.itemgetter(你真的必须使用2.5吗?它死了,埋没了.)
除了更简单之外,由于在C中实现,它也应该稍快一些.itemgetter当你知道你想要哪些索引时,你可以构造一个项目,然后在许多列表上反复调用它.它仍然需要复制N个项目并每次创建一个元组,但它应该尽可能快地执行此操作.