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

ste*_*no1 2 python tuples list

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

a=[1,2,3,4]
b=tuple([id(x) for x in a])
Run Code Online (Sandbox Code Playgroud)

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

谢谢你!

[编辑]按照建议我尝试过

b=tuple(id(x) for x in a)
Run Code Online (Sandbox Code Playgroud)

不过似乎比以前慢了。测试脚本:

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)
Run Code Online (Sandbox Code Playgroud)

这对我来说是非常出乎意料的。

Ant*_*ala 5

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

使用生成器时,需要先将生成器转换为序列,以便分配元组。由于生成器固有的开销,这会更慢。


最快的选择自然是根本使用元组而使用列表。在我看来,元组与“不可变列表”不同;仅当需要使用序列作为字典键或集合元素,或者可以命名每个元素时(如 中所示namedtuple),才真正应该使用元组。