繁体   English   中英

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

[英]Most efficient way to join strings in Python

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

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

面试官问我:您能否通过对现有代码进行一些细微调整来使这段代码更快? 输出应保持完全相同。

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

非常感谢。

"".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 (在创建有用的理解时记住这一点很有用, 与之不同的是,请参阅连接字符串。生成器还是列表理解?

结论:我们不要加入club

没事做:

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

这只是进入the的另一种方式。

好的,这个版本呢?

"".join(* ["\x63\x6c\x75\x62"])
%%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代表x ...]在这里没有用。 删除它可使代码运行快4倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM