替换列表列表中的元素python

KRB*_*KRB 4 python string list

我有一个列表列表如下:

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

     list=[['a','bob'],['a','bob'],['a','john']]
Run Code Online (Sandbox Code Playgroud)

我想查看此列表并将所有 'bob' 实例更改为 'b' 并保持其他实例不变。

    for x in list:
       for a in x:
          if "bob" in a:
             a.replace("bob", 'b')
Run Code Online (Sandbox Code Playgroud)

打印出 x 后,它仍然与 list 相同,但不是如下:

    list=[['a','b'],['a','b'],['a','john']]
Run Code Online (Sandbox Code Playgroud)

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

jpp*_*jpp 5

因为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')
Run Code Online (Sandbox Code Playgroud)

结果:

[['a', 'b'], ['a', 'b'], ['a', 'john']]
Run Code Online (Sandbox Code Playgroud)

更多的 Pythonic 是使用列表理解来创建一个新列表。例如,如果只有两个值中的第二个包含需要检查的名称:

L = [[i, j if j != 'bob' else 'b'] for i, j in L]
Run Code Online (Sandbox Code Playgroud)