我需要以最快的方式从列表中创建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)
这对我来说非常意外。
答案 0 :(得分:4)
使用列表理解更快。这是因为事先知道元组的大小(可以为len(list)
项分配内存)。
对于生成器,需要首先将生成器转换为序列,以便可以分配元组。由于生成器的固有开销,这将会变慢。
最快的选择当然是不完全使用元组并使用列表代替。在我看来,元组与“不可变列表”不同;只有在需要使用序列作为字典键或作为集合元素时才应该使用元组。