簡體   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