替换列表python列表中的元素

时间:2018-09-24 16:04:37

标签: python string list

我有一个列表列表,如下所示:

     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相同,但不如下:

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

为什么更改未反映在列表中?

5 个答案:

答案 0 :(得分:2)

由于str.replace不能就地运行 ,因此returns a copy。作为不可变对象,您需要将字符串分配到列表列表中的元素。

如果您通过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]

答案 1 :(得分:0)

我将使用一个简单的示例,但是基本上x是另一个变量,并且没有链接到list元素。您必须直接更改list元素才能更改列表。

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

这会更改列表

答案 2 :(得分:0)

之所以如此,是因为您仅更改了临时变量a。 清单= [1,2,3] 对于清单中的我:    i + = 1

列表仍为[1,2,3]

您必须根据列表中的索引来编辑字符串

答案 3 :(得分:0)

您可以尝试使用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']]

答案 4 :(得分:0)

我可能对聚会不太了解,但是使用Python maplist comprehension可以做到这一点。它可以对具有任意多个值的列表列表进行操作。

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

[list(map(lambda x: x if x != 'bob' else 'b', i)) for i in l]

它为您提供所需的输出

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

主要思想是,内部循环遍历内部循环并使用简单的lambda函数执行替换。

我希望这对正在寻找类似物品的其他人有所帮助。