Python替换列表中的字符

时间:2014-12-08 01:47:35

标签: python string list replace

我有一个如下所示的Python列表:

list = ['|wwwwwwwwadawwwwwwwwi', '|oooooooocFcooooooooi']

我通过这样做来访问我想要的索引中的字母:

list[y][x]

例如,list[1][10]会返回F

我想将F替换为值。这样就改变了列表中的字符串。

我尝试了list[y][x] = 'o',但它会抛出错误:

    self.map[y][x] = 'o'
TypeError: 'str' object does not support item assignment

有人可以帮帮我吗?感谢。

4 个答案:

答案 0 :(得分:4)

正如@Marcin所说,Python字符串是不可变的。如果您要替换特定字符/子字符串,则string.replace。如果要支持更改一个特定字符的功能,您还可以使用字符列表而不是字符串,如here所述。

如果您想要string.replace之类的内容,但对于索引而不是子字符串,您可以执行以下操作:

def replaceOneCharInString(string, index, newString):
    return string[:index] + newString + string[index+len(newString):]

但是你需要做一些长度检查。

修改:在string的括号前忘了string[index+len(newString):]。 Woops。

答案 1 :(得分:2)

由于python字符串是不可变的,因此无法修改它们。你需要制作新的。一种方法如下:

tmp_list = list(a_list[1])
tmp_list[10] = 'o' # simulates: list[1][10]='o'
new_str = ''.join(tmp_list)
#Gives |oooooooococooooooooi
# substitute the string in your list
a_list[1] = new_str

答案 2 :(得分:0)

正如marcin所说,字符串在Python中是不可变的,因此您无法在现有字符串中分配单个字符。你可以索引它们的原因是那些序列。因此

for c in "ABCDEF":
    print(c)

可以工作,并在单独的行上打印字符串的每个字符。

要实现你想要的东西,你需要建立一个新的字符串。例如,这是一个强力方法来替换字符串的单个字符

def replace_1(s, index, c)
    return s[:index] + c + s[index+1:]

您可以这样使用:

self.map[y] = replace_1(self.map[y], x, 'o')

这将起作用,因为self.map是列表,这是设计可变的。

答案 3 :(得分:0)

让我们使用L表示"列表"因为list是python中的一个函数

L= ['|wwwwwwwwadawwwwwwwwi', '|oooooooocFcooooooooi']
L[1]='|oooooooococooooooooi'
print(L)

不幸的是,不支持从对象(在这种情况下)中更改角色。正确的方法是删除对象并添加一个新的字符串对象。

输出

['|wwwwwwwwadawwwwwwwwi', '|oooooooococooooooooi']