Python3.x:替换非常大的字符串中的字符的最快方法



假设我有以下使用 Python3.x 的非常大的字符串,大小为 GB 和 +100 亿个字符长度:

string1 = "XYZYXZZXYZZXYZYXYXZYXZYXZYZYZXY.....YY"

考虑到它的长度,这已经需要 +GB 才能加载到 RAM 中。

我想写一个函数,用A替换每个XYB替换每个,用C替换Z。我的目标是尽快做到这一点。当然,这也应该是有效的(例如,可能有一些我不确定的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)

哪些输出

'ABCBACCABCCABCBABACBACBACBCBCAB...BB'

我担心这不是最有效的方法,因为我在如此大的数据结构上同时调用三个函数。

对于这么大的字符串,最有效的解决方案是什么?

一种更节省内存的方法,在此过程中不会生成这么多临时字符串,是使用str.translate

>>> string1 = "XYZYXZZXYZZXYZYXYXZYXZYXZYZYZXY"
>>> string1.translate({ord("X"): "A", ord("Y"): "B", ord("Z"): "C"})
'ABCBACCABCCABCBABACBACBACBCBCAB'

这将只分配一个(在您的情况下是超大)字符串。

最新更新