由于Python string无法更改,我想知道如何更有效地连接字符串?
我可以这样写:
s += stringfromelsewhere
Run Code Online (Sandbox Code Playgroud)
或者像这样:
s = []
s.append(somestring)
later
s = ''.join(s)
Run Code Online (Sandbox Code Playgroud)
在写这个问题时,我发现了一篇很好的文章谈论这个话题.
http://www.skymind.com/~ocrow/python_string/
但它是在Python 2.x.中,所以问题是在Python 3中做了哪些改变?
我能够在线找到一大堆信息(在Stack Overflow和其他方面),关于如何在Python中使用+或+=连接它是一种非常低效和糟糕的做法.
我似乎无法找到为什么+=这么低效.除了这里提到"它在某些情况下已经优化了20%的改进"(仍然不清楚这些情况是什么),我找不到任何其他信息.
在更技术层面上发生了什么,''.join()优于其他Python串联方法?
请问,你知道一个提供可变字符串的Python库吗?谷歌的结果令人惊讶地回归.我找到的唯一可用的库是http://code.google.com/p/gapbuffer/,它在C中,但我更喜欢用纯Python编写.
编辑:感谢您的回复,但我正在追求一个高效的库.也就是说,''.join(list)可能有用,但我希望有更优化的东西.此外,它必须支持常规字符串常用的东西,如正则表达式和unicode.
我正在分析我的代码的复杂性.从我在网上找到的,因为字符串在python中是不可变的,字符串和字符的串联应该是O(len(string)+ 1).
现在,这是我的一段代码(简化):
word = ""
for i in range(m):
word = char_value + word
return word
Run Code Online (Sandbox Code Playgroud)
总时间复杂度应为:
(0 + 1)+(1 + 1)+ ... + m = m(m + 1)/ 2 = O(m ^ 2)
它是否正确?
所以我有一个字符串,在该字符串中,某些单词中的某些字符被其他字符替换(typo_text)。例如:“美国、德国、欧盟委员会、日本和加拿大资助测试的开发和公平推广。” 这将是正确的格式,但我得到的却是“XSX、Gxrmxny、欧盟委员会、Jxpxn 和 Cxnxdx,为结束新冠肺炎急性期所需的测试、治疗和疫苗的开发和公平推广提供资金” -19 大流行。我一直在创建一个需要for循环来纠正拼写错误的脚本:
def corrected_text(text):
newstring=""
for i in text:
if i not in "aeiouAEIOU":
newstring=newstring+i
text=newstring
return text
Run Code Online (Sandbox Code Playgroud)
我知道当我运行这个时,它只会从文本中删除所有元音。然而,这似乎是朝着正确方向迈出的一步,有助于纠正拼写错误并了解for基于循环的方法。
我有两个存在此问题的单词列表:
name_G7_countries = ['Canada', 'France', 'Germany', 'Italy', 'Japan', 'UK', 'USA']
mistake = ['Cxnxdx', 'Frxncx', 'Gxrmxny', 'Xtxly', 'Jxpxn','XK', 'XSX']
Run Code Online (Sandbox Code Playgroud)
我知道使用类似的东西'Jxpxn'.replace('x', 'a')可能会起作用;但是,对于其他短语,可能不会,所以我不确定如何从这里继续。
为了连接两个字符串,内存管理器将尝试重新分配一个字符串的内存位置,以便另一个字符串能够适应内存中紧挨着它的另一个字符串。 /sf/answers/2380573961/迭代字符串追加的时间复杂度实际上是 O(n^2) 还是 O(n)? 如果它不能就地重新分配,那么它必须将两者都移动到一个新的内存位置。
问题是为了避免将两个字符串移动到新内存位置的这种开销,是否有一种首选的、有效的方法在 Python 中连接两个字符串。我正在考虑使用 StringIO 使其成为文本缓冲区?你怎么看?
在这两个语句中,我都将一个字符附加"a"到字符串中s:
s += "a"s = s + "a"Python 中哪个语句的时间复杂度更好?