Python - 从计算列表中创建元组的最快方法

时间:2016-08-10 13:08:48

标签: python list tuples

我需要以最快的方式从列表中创建Python元组,但需要使用中间计算。为了更清楚,我放了一个代码片段:

a=[1,2,3,4]
b=tuple([id(x) for x in a])

这就是我现在所拥有的。 有比这更好的东西吗?这段代码创建一个列表然后将它转换为元组,有没有办法直接创建元组?

谢谢!

[编辑] 正如我所建议的那样

b=tuple(id(x) for x in a)

然而它似乎比以前慢。 测试脚本:

import time

a=[1,2,3,4]

t1=time.time()
for i in range(1000000):
    b=tuple([id(x) for x in a])
print(time.time()-t1)

t2=time.time()
for i in range(1000000):
    b=tuple(id(x) for x in a)
print(time.time()-t2)

这对我来说非常意外。

1 个答案:

答案 0 :(得分:4)

使用列表理解更快。这是因为事先知道元组的大小(可以为len(list)项分配内存)。

对于生成器,需要首先将生成器转换为序列,以便可以分配元组。由于生成器的固有开销,这将会变慢。

最快的选择当然是完全使用元组并使用列表代替。在我看来,元组与“不可变列表”不同;只有在需要使用序列作为字典键或作为集合元素时才应该使用元组。