gpt4 book ai didi

python - 从映射连接字符串时的性能

转载 作者:行者123 更新时间:2023-12-04 01:14:28 26 4
gpt4 key购买 nike

我在从映射 (Mapping[str, str]) 连接字符串时查看性能。

我有这两个简单的功能:

def nested(sequence, mapping):

string = ""

for x in sequence:

string += mapping[x]

return string

def flat(sequence, mapping):

return "".join(mapping[x] for x in sequence)

在我的项目中,我发现使用“平面”解决方案时性能明显下降。最初,我选择该解决方案是因为:“平面优于嵌套。”,但很快转向“嵌套”解决方案。

我用更简单的序列和映射运行了 timeit 测试:

letters = (
"a","b","c","d","e","f","g","h","i","j","k","l","m",
"n","o","p","q","r","s","t","u","v","w","x","y","z"
)

mymapping = {x: x for x in letters}

mysequence = "mysequence"

print(timeit.timeit("nested(mysequence, mymapping)", globals=globals()))

print(timeit.timeit("flat(mysequence, mymapping)", globals=globals()))

并获得:

In [683]: 0.675819274969399
0.965234256349504

“嵌套”解决方案的速度提高了 43%。我在我的项目中观察到数倍于速度的情况。

在文档中,我们可以读到:“连接字符串序列的首选、快速方法是调用''.join(sequence)”。但我清楚地看到“+”运算符在此配置中更快。

虽然我可以继续使用“嵌套”解决方案:

我是否缺少另一个“平面”解决方案? (字符串不能使用 sum())

您对这种行为有什么解释吗?

谢谢。

最佳答案

当你使用列表理解时,在我这边加入会更快:

def flat_list(sequence, mapping):
return "".join([mapping[x] for x in sequence])
2.5292927          # nested
2.3440613999999997 # flat_list
6.530926599999999 # flat

我的猜测是它与 this 有关.生成器表达式似乎有一些小的开销,并且重复 10000 次这种差异变得可见。

关于python - 从映射连接字符串时的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63792129/

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