изменить значения в списке - python - PullRequest
4 голосов
/ 12 мая 2010

У меня есть этот код:

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']]

Что мне делать, чтобы изменения продолжались?

Ответы [ 6 ]

4 голосов
/ 12 мая 2010

Если вы хотите удалить все вхождения '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']]
4 голосов
/ 12 мая 2010

Это не о списке. Строки Python неизменны:

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

Вы заменяете 'a' на '*', а затем отбрасываете результат.

Попробуйте что-то вроде:

for i,value in enumerate(mylist):
    mylist[i] = value.replace('x', 'y')
1 голос
/ 12 мая 2010

Вы действительно хотите заменить элемент во вложенном списке следующим образом:

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] = '*'

С результатом:

a = [['*', 'b', 'c'], ['*', 'f', 'c'], ['*', 'c', 'd']]
0 голосов
/ 12 мая 2010
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']]
0 голосов
/ 12 мая 2010

Это будет работать:

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']].

Примечание: списки здесь см. В документации по remove () .

0 голосов
/ 12 мая 2010

Поиск функции замена :

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

Возвращает копию строки, в которой все вхождения подстроки old заменены на new. Если указан необязательный аргумент count, только первые подсчеты заменяются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...