我有一个如下所示的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
有人可以帮帮我吗?感谢。
答案 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']