我想从字符串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

当前回答

给s2[j]赋值会出错

字符串是不可变的,所以你在C中所做的在Python中是不可能的。相反,您必须创建一个新的字符串。

我想从字符串中读取一些字符并将其放入 其他字符串。

用切片:

>>> s1 = 'Hello world!!'
>>> s2 = s1[6:12]
>>> print(s2)
world!

其他回答

Python中的字符串是不可变的(你不能就地更改它们)。

你想做的事情可以通过很多方式来实现:

复制字符串:

foo = 'Hello'
bar = foo

通过连接旧字符串的所有字符创建一个新字符串:

new_string = ''.join(c for c in oldstring)

切片和复制:

new_string = oldstring[:]

这个解决方案怎么样:

str="Hello World"(如问题中所述) SRR = str+ ""

性能的方法

如果经常执行索引替换,一种性能更好、内存更紧凑的方法是转换为不同的数据结构。然后,当你完成时,转换回字符串。

列表:

最简单和最简单:

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更节省内存,但它确实需要更多的操作。

如果你想把一个特定的字符换成另一个字符,另一种方法是:

def swap(input_string):
   if len(input_string) == 0:
     return input_string
   if input_string[0] == "x":
     return "y" + swap(input_string[1:])
   else:
     return input_string[0] + swap(input_string[1:])

其他答案都是正确的,但是你当然可以这样做:

>>> str1 = "mystring"
>>> list1 = list(str1)
>>> list1[5] = 'u'
>>> str1 = ''.join(list1)
>>> print(str1)
mystrung
>>> type(str1)
<type 'str'>

如果你真的想的话。