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)
这对我来说是非常出乎意料的。
使用列表理解速度更快。这是因为元组的大小是预先已知的(可以为len(list)项目分配内存)。
使用生成器时,需要先将生成器转换为序列,以便分配元组。由于生成器固有的开销,这会更慢。
最快的选择自然是根本不使用元组而使用列表。在我看来,元组与“不可变列表”不同;仅当需要使用序列作为字典键或集合元素,或者可以命名每个元素时(如 中所示namedtuple),才真正应该使用元组。