我想从字符串s1中读取一些字符,并将其放入另一个字符串s2中。
但是,赋值给s2[j]会给出一个错误:
s2[j] = s1[i]
# TypeError: 'str' object does not support item assignment
在C语言中,这是可行的:
int i = j = 0;
while (s1[i] != '\0')
s2[j++] = s1[i++];
我在Python中的尝试:
s1 = "Hello World"
s2 = ""
j = 0
for i in range(len(s1)):
s2[j] = s1[i]
j = j + 1
性能的方法
如果经常执行索引替换,一种性能更好、内存更紧凑的方法是转换为不同的数据结构。然后,当你完成时,转换回字符串。
列表:
最简单和最简单:
s = "TEXT"
s = list(s)
s[1] = "_"
s = "".join(s)
bytearray(的ASCII):
这种方法使用较少的内存。内存也是连续的,尽管在Python中,如果你做的是单元素随机访问,这并不太重要:
ENC_TYPE = "ascii"
s = "TEXT"
s = bytearray(s, ENC_TYPE)
s[1] = ord("_")
s = s.decode(ENC_TYPE)
中bytearray (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)
尽管这种方法可能比使用list更节省内存,但它确实需要更多的操作。