gpt4 book ai didi

python - 与外部相比,在列表理解内设置集合时存在巨大的时间差异

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:43 24 4
gpt4 key购买 nike

我有下面的测试用例,我在其中找到两个字符串中存在的元素,并按照第一个字符串的顺序返回它们。为什么在第二种情况下,set(string2) 在列表推导中完成的速度慢了一个数量级?

import timeit
timeit.timeit(
"""
import random, string
string1 = ''.join(random.choice(string.ascii_uppercase) for _ in range(100000))
string2 = ''.join(random.choice(string.ascii_uppercase) for _ in range(100000))
v=set(string2)
[x for x in string1 if x in v]
""",
number=10,
)
# 2.005337953567505

timeit.timeit(
"""
import random, string
string1 = ''.join(random.choice(string.ascii_uppercase) for _ in range(100000))
string2 = ''.join(random.choice(string.ascii_uppercase) for _ in range(100000))
[x for x in string1 if x in set(string2)]
""",
number=10,
)
# 22.1062970161438

最佳答案

Python 正在为列表理解中“循环”的每次迭代构建 set(string2) 集。它并不知道它每次都是相同的集合。

例如每次 python 执行列表理解 if 子句时,都会对 x in set(string2) 求值,这意味着每次都会创建集合。由于 x 是 100000 个字符串的每个字符,这意味着在第二种情况下(相同的)集合被构建 100000 次,但在第一种情况下只构建一次(您将集合定义为 v ).

关于python - 与外部相比,在列表理解内设置集合时存在巨大的时间差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com