【发布时间】:2017-01-30 00:47:10
【问题描述】:
我已经听说过你不应该在 for 循环中进行字符串连接,因为字符串是不可变的,因此它会将连接计算为新的字符串实例,然后重新分配标识符。因此,如果结果有 n 个字符,则时间复杂度将为 O(n^2)
不好: 运行时间为 O(n^2)。迭代“+”连接。
letters = ""
for c in document:
if c.isalpha():
letters += c
良好: 运行时间为 O(n)。迭代追加,带有最终的 "".join()
document = ""
temp = []
for c in document:
if c.isalpha():
temp.append(c)
letters = "".join(temp)
同时我也读到了
“Python 解释器的一些后期实现已经开发了一种优化,以允许此类代码在线性时间内完成,..”
所以第一个解决方案也应该没问题?这是最新的python版本中的优化吗?
【问题讨论】:
-
大多数pythonistas会使用理解:
letters = ''.join([c for c in document if c.isalpha()]) -
@StefanPochmann 对不起我的错,字母应该在循环之外。复制粘贴错误。更正了两个 sn-ps。
-
@user1767754 第一个在第一行仍然有语法错误。还有一个奇怪的评论。
标签: python string time-complexity string-concatenation