在Python中连接字符串的最有效方法

时间:2018-03-09 08:31:12

标签: python string join optimization list-comprehension

在采访中,我获得了一段Python代码:

"".join([x for x in "\x63\x6c\x75\x62"])

采访者问我:只需对现有代码进行微调,你能否更快地完成这段代码?输出应保持完全相同。

足够说,我没有通过这个问题。我想知道是否有什么可以帮助我理解如何优化此代码?

非常感谢。

4 个答案:

答案 0 :(得分:11)

"".join([x for x in "\x63\x6c\x75\x62"])

是一种非常冗余的做法:

"\x63\x6c\x75\x62"

一般情况下,你不应该这样做

x for x in "\x63\x6c\x75\x62"

这是没用的,因为你不会以任何方式转换或过滤x(当然它会变慢)。

最后一件事,如果面试官打算删除[]他/她也错了。

"".join(x for x in "\x63\x6c\x75\x62")
使用 listcomp 的速度比慢,因为join无论如何都必须构建一个list(在创建有用的理解时,记住这一点很有用,不像那个,见Joining strings. Generator or list comprehension?

结论:让加入club

答案 1 :(得分:2)

无事可做:

>>> res = "\x63\x6c\x75\x62"
>>> res
'club'

这只是一种进入刺痛的方式。

答案 2 :(得分:0)

好的,伙计们,这个版本怎么样?

"".join(* ["\x63\x6c\x75\x62"])

答案 3 :(得分:-1)

%%timeit
"".join([x for x in "\x63\x6c\x75\x62"])
289 ns ± 3.54 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

输出club

%%timeit 
"".join(["\x63\x6c\x75\x62"])  
66.8 ns ± 0.46 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

输出club

[x for x ...]在这里没用。删除它会使代码运行速度提高4倍。