2010-05-12 152 views
3

我有這樣的代碼:變化值 - 蟒蛇

a=[['a','b','c'],['a','f','c'],['a','c','d']]  
for x in a:  
    for y in x:  
     if 'a' in x:  
      x.replace('a','*')` 

但結果是:

a=[['a','b','c'],['a','f','c'],['a','c','d']] 

和機器人a=[['b','c'],['f','c'],['c','d']]

我應該怎麼做這樣的變化將持續?

+0

另外,你的代碼是錯誤的。你根本得不到任何結果,因爲它會引發'AttributeError' – SilentGhost 2010-05-12 17:50:47

+0

你想完成什麼? – SilentGhost 2010-05-12 17:53:05

回答

0

搜索功能replace

str.replace(old, new[, count]) 

返回字符串的副本通過更換新的舊的子串出現的所有。如果給出了可選參數計數,則只會替換第一個計數事件 。

4

這不是關於清單。 Python字符串是不可變的:

> a = 'x' 
> a.replace('x', 'bye') 
> a 
'x' 

你用'*'代替'a',然後丟掉結果。

嘗試類似:

for i,value in enumerate(mylist): 
    mylist[i] = value.replace('x', 'y') 
0

這會工作:

a=[['a','b','c'],['a','f','c'],['a','c','d']] 
for x in a:  
    for y in x:  
     if y == 'a': 
      x.remove(y) 

或者更簡單:

y = 'a' 
a=[['a','b','c'],['a','f','c'],['a','c','d']] 
for x in a:  
    x.remove(y) 

,讓你a=[['b','c'],['f','c'],['c','d']]

注意:有關列表here,請參閱remove()文檔。

4

如果你想從所有嵌套子列表中刪除的'a'所有出現,你可以這樣做:

>>> [[i for i in x if i != 'a'] for x in a] 
[['b', 'c'], ['f', 'c'], ['c', 'd']] 

,如果你想用星號來代替它們:

>>> [[i if i != 'a' else '*' for i in x] for x in a] 
[['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']] 
1

你真的想要替換嵌套列表中的元素如下所示:

a=[['a','b','c'],['a','f','c'],['a','c','d']]  
for row in a: 
    for ix, char in enumerate(row): 
     if char == 'a': 
      row[ix] = '*' 

隨着結果T:

a = [['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']] 
0
a=[['a','b','c'],['a','f','c'],['a','c','d']] 
b=[[subelt.replace('a','*') for subelt in elt] for elt in a] 
print(b) 

# [['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']]