性能方法
如果您经常执行索引替换,一种性能更高且内存更紧凑的方法是转换为不同的数据结构。然后,完成后转换回字符串。
列表:
最简单最简单的:
s = "TEXT"
s = list(s)
s[1] = "_"
s = "".join(s)
字节数组(ASCII):
此方法使用较少的内存。内存也是连续的,但如果你在做单元素随机访问,这在 Python 中并不重要:
ENC_TYPE = "ascii"
s = "TEXT"
s = bytearray(s, ENC_TYPE)
s[1] = ord("_")
s = s.decode(ENC_TYPE)
字节数组(UTF-32):
更一般地说,对于基本 ASCII 集之外的字符,我建议使用 UTF-32(有时是 UTF-16),这将确保随机访问的对齐:
ENC_TYPE = "utf32"
ENC_WIDTH = 4
def replace(s, i, replacement):
start = ENC_WIDTH * (i + 1)
end = ENC_WIDTH * (i + 2)
s[start:end] = bytearray(replacement, ENC_TYPE)[ENC_WIDTH:]
s = "TEXT HI ひ RA ら GA が NA な DONE"
s = bytearray(s, ENC_TYPE)
# Performs s[1] = "_"
replace(s, 1, "_")
s = s.decode(ENC_TYPE)
虽然这种方法可能比 using 更节省内存list
,但它确实需要更多的操作。