[英]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 的方法是使用map
和list 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.