Sha*_*ang 0 python string replace python-3.x
假设我使用Python3.x有以下非常大的字符串,大小为几GB,长度为+10亿个字符:
string1 = "XYZYXZZXYZZXYZYXYXZYXZYXZYZYZXY.....YY"
Run Code Online (Sandbox Code Playgroud)
鉴于其长度,这已经需要+ GB加载到RAM中.
我想编写一个函数来替换每个Xwith A, Ywith B和Zwith C.我的目标是尽快做到这一点.当然,这也应该是有效的(例如,可能存在一些我不确定的RAM权衡).
对我来说最明显的解决方案是使用string模块和string.replace():
import string
def replace_characters(input_string):
new_string = input_string.replace("X", "A").replace("Y", "B").replace("Z", "C")
return new_string
foo = replace_characters(string1)
print(foo)
Run Code Online (Sandbox Code Playgroud)
哪个输出
'ABCBACCABCCABCBABACBACBACBCBCAB...BB'
Run Code Online (Sandbox Code Playgroud)
我担心这不是最有效的方法,因为我同时在如此大的数据结构上调用三个函数.
对于这么大的字符串,最有效的解决方案是什么?
将使用更节省内存的方法,该方法不会产生如此多的临时字符串str.translate.
>>> string1 = "XYZYXZZXYZZXYZYXYXZYXZYXZYZYZXY"
>>> string1.translate({ord("X"): "A", ord("Y"): "B", ord("Z"): "C"})
'ABCBACCABCCABCBABACBACBACBCBCAB'
Run Code Online (Sandbox Code Playgroud)
这将只分配一个(在您的情况下超大)字符串.