首页 > 解决方案 > 替换列表python列表中的元素

问题描述

我有一个列表如下:

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

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

标签: pythonstringlist

解决方案


因为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]

推荐阅读