【发布时间】:2014-04-25 15:50:21
【问题描述】:
我有一些(少量)项目的列表,例如:
my_list = [1,2,3,4,5,6,7,8,9,10]
我有一个索引元组,例如:
indexes = (1,5,9)
我想要列表中值的元组,例如:
tuple(my_list[x] for x in indexes)
但事实证明这很慢(运行很多次时)。
对于我运行的每个列表,索引元组都不会改变 - 那么有没有更快的方法?
我使用的是 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
这是异常情况,还是列表理解真的比生成器表达式好得多?
【问题讨论】:
-
您正在寻找的输出究竟是什么?我不完全理解你的问题。
-
@sdamashek 他在问为什么在 genexp 上调用
tuple比在列表 comp 上调用tuple慢得多 -
我也在问是否有更好/更快的方法来实现同样的目标。理想情况下,我想说:tuple(my_list[indexes])
-
@delnan - 有趣,我从来不知道。我将删除我的其他评论,因为它显然是错误的。感谢您的信息!
标签: python performance list tuples