2014-12-08 20 views
2

我有一個Python列表,看起來像下面:Python的替換字符在名單

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

我做這個訪問我想在索引中的信:

list[y][x] 

例如,list[1][10]返回F。我想用替換一個值。從而改變列表中的字符串。

我試圖list[y][x] = 'o'但它引發錯誤:

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

任何人可以幫助我嗎?謝謝。

+0

Python中的字符串是不可變的,它可以通過這種方式來完成。 – Marcin 2014-12-08 01:49:33

回答

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。

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 
0

由於馬辛說,字符串是不可變的Python,所以你不能分配給單個字符現有的字符串中。你可以爲它們編制索引的原因是這個序列。因此,

for c in "ABCDEF": 
    print(c) 

將工作,並在單獨的行上打印字符串的每個字符。

達到你想要什麼,你需要建立一個新的string.For例子,這裏是一個強力的方法來替換字符串

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是列表,這是設計可變的。

0

讓我們用L代表「名單」,因爲名單是在Python

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

功能不幸的是改變從對象字符(在這種情況下),不支持。正確的方法是刪除對象並添加一個新的字符串對象。

輸出

['|wwwwwwwwadawwwwwwwwi', '|oooooooococooooooooi']