繁体   English   中英

替换列表列表中的元素python

[英]Replace elements in a list of lists 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']]

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

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

我将使用一个简单的示例,但基本上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

这改变了列表

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

我可能有点参加聚会,但更 Pythonic 的方法是使用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函数执行替换。

我希望这可以帮助其他正在寻找类似内容的人。

之所以如此,是因为您只是在更改临时变量 a。 list = [1,2,3] for i in list: i+=1

列表仍然是 [1,2,3]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM