在采访中,我获得了一段Python代码:
"".join([x for x in "\x63\x6c\x75\x62"])
采访者问我:只需对现有代码进行微调,你能否更快地完成这段代码?输出应保持完全相同。
足够说,我没有通过这个问题。我想知道是否有什么可以帮助我理解如何优化此代码?
非常感谢。
答案 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倍。