GenExp与ListComp上的元组()

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个项目并每次创建一个元组,但它应该尽可能快地执行此操作.

  • 为[`operator.itemgetter()`](https://docs.python.org/2.5/lib/module-operator.html#l2h-1193)提供了2.5文档链接.叫我严重的挖掘机. (5认同)