簡體   English   中英

在python中將1個列表中的項目替換為另一個列表中的項目

[英]Replacing items in 1 list to items in another list in python

我試圖用另一個列表中的項目替換列表中的1個列表中的項目。

    alist = [[1,2,3], [4,5,6], [7,8,9]]
    blist = [[a,b,c], [d,e,f], [g,h,i]]

基本上,我想用blist對應項替換alist中的項目。 例如,如果某人在列表中選擇1,我想將其替換為blist中相同的索引(即a)。

    alist = [[a,2,3], [4,5,6], [7,8,9]]

有什么建議么?

一種方法是將兩個列表一起循環,然后循環每個子組以替換匹配的選擇。

對於鎖步迭代, zip函數是您最好的朋友。 對於轉換列表, 列表理解是一個很好的工具。 使用方法如下:

>>> alist = [[1,2,3], [4,5,6], [7,8,9]]
>>> blist = [[10,20,30], [40,50,60], [70,80,90]]
>>> choice = 1
>>> alist = [[(bx if ax==choice else ax) for ax, bx in zip(aseq, bseq)] for aseq, bseq in zip(alist, blist)]
>>> alist
[[10, 2, 3], [4, 5, 6], [7, 8, 9]]

這種方法的好處是它可以進行多次替換(例如,如果alist包含多個1條目,則它們都將全部替換為blist中的相應條目)。

另一個不錯的功能是ax==choice決策可以很容易地用其他謂詞替換(例如, ax in {2, 5, 8}將在一次遍歷中搜索多個替換目標)。 另一個示例是ax % 2 == 0 ,它將blist替換為偶數的alist值。

>>> z = [(i, x.index(item)) for i, x in enumerate(alist) if item in x][0]
>>> alist[z[0]][z[1]] = blist[z[0]][z[1]]
>>> alist
[['a', 2, 3], [4, 5, 6], [7, 8, 9]]

看到它在線上工作: ideone

粗略但容易解釋:

blist = [['a','b','c'], ['d','e','f'], ['g','h','i']]
alist = [[1,2,3], [4,5,2], [7,8,9]]
x = 2

for y in xrange(len(alist)):
    if x in alist[y]:
        i = alist[y].index(x)
        alist[y][i] = blist[y][i]

print alist

輸出:

[[1, 'b', 3], [4, 5, 'f'], [7, 8, 9]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM