[英]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.