Заменить элементы в списке списков python - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть список списков следующим образом:

     list=[]
     *some code to append elements to list*

     list=[['a','bob'],['a','bob'],['a','john']]

Я хочу просмотреть этот список и изменить все экземпляры 'bob на' b 'и оставить остальные без изменений.

    for x in list:
       for a in x:
          if "bob" in a:
             a.replace("bob", 'b')

После распечатки x он по-прежнему совпадает со списком, но не следующим образом:

    list=[['a','b'],['a','b'],['a','john']]

Почему изменение не отражается в списке?

Ответы [ 4 ]

0 голосов
/ 24 сентября 2018

Вы можете попробовать использовать объект словаря python

import numpy as np
L = [['a','bob'],['a','bob'],['a','john']]
dic = {'bob':'b'} # you can specify more changes here
new_list = [dic.get(n, n) for n in np.concatenate(L)]
print(np.reshape(new_list,[-1,2]).tolist())

Результат равен

[['a', 'b'], ['a', 'b'], ['a', 'john']]
0 голосов
/ 24 сентября 2018

Поскольку str.replace не работает на месте , он возвращает копию .Как неизменяемые объекты, вам нужно назначить строки для элементов в вашем списке списков.

Вы можете назначить непосредственно вашему списку списков, если вы извлекаете целые числа индексации с помощью enumerate:

L = [['a','bob'],['a','bob'],['a','john']]

for i, x in enumerate(L):
    for j, a in enumerate(x):
        if 'bob' in a:
            L[i][j] = a.replace('bob', 'b')

Результат:

[['a', 'b'], ['a', 'b'], ['a', 'john']]

Более Pythonic будет использовать понимание списка для создания нового списка.Например, если только второе из двух значений содержит имена, которые необходимо проверить:

L = [[i, j if j != 'bob' else 'b'] for i, j in L]
0 голосов
/ 24 сентября 2018

Это так, потому что вы меняете только временную переменную a.list = [1,2,3] для i в списке: i + = 1

список по-прежнему будет [1,2,3]

, вам нужно отредактировать строку на основе ее индексав списке

0 голосов
/ 24 сентября 2018

Я собираюсь использовать простой пример, но в основном x - это другая переменная, которая не связана с элементом списка.Вы должны изменить элемент списка напрямую, чтобы изменить список.

l=[1,2,3,4]
for x in l:
    x=x+1

Это не изменит список

l=[1,2,3,4]
for i,x in enumerate(l):
    l[i]=x+1

Это изменит список

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