簡體   English   中英

根據另一個列表列表從列表列表中選擇元素

[英]Select elements from a list of lists based on another list of lists

我有兩個列表的列表,它們總是具有相同的長度。

l1 = [[0, 1, 2, 2, 0, 1, 2], [0, 1, 0, 0, 0], [0, 1, 2, 0, 0]]
l2 = [[0,(1,'a','b'), (1,'a','b'), (1,'a','b'), 0, (3, 'x','y'), 0], [0, (2,'c','d'), 0, 0, 0], [0, (3, 'e','f'), 0, 0, 0]]

我想要的是僅當相同元素的數量與 l1 中的 1-2s 序列(或僅 1s)相同時才返回 l2 的非 0 元素。 例如,在這種情況下,我希望它只返回

out = [[(1,'a','b'), (1,'a','b'), (1,'a','b')], [(2,'c','d')], []]

因為有三個相同的元組和一個 1-2-2 的序列,而對於 (3, 'e','f'),只有 on 但有一個 1-2 的序列(所以它應該是( 3,'e','f'),(3, 'e','f') 而不是在 l2 中。

我一直在嘗試做的是使用 Counter 來計算非 '0' 元素的出現次數,但是在計算 1 和 2s 時它不區分序列,因此我無法進行比較

for x, y in zip(l1,l2):
    print(Counter(x),Counter(y))

返回

Counter({2: 3, 0: 2, 1: 2}) Counter({0: 3, (1, 'a', 'b'): 3, (3, 'x', 'y'): 1})
Counter({0: 4, 1: 1}) Counter({0: 3, (2, 'c', 'd'): 2})
Counter({0: 5}) Counter({0: 4, (3, 'e', 'f'): 1})

沒有辦法知道 1 和 2 的計數對應什么。

有關如何執行此操作的任何幫助?

一些輸入預期輸出示例:

l1 = [[0,1,2,0], [0,1]]
l2 = [[0, (1,'a','b'), (1,'a','b'), 0],[(2,'a','b'),(2,'a','b')]]
out = [[(1,'a','b'), (1,'a','b')],[]]

l1 = [[2,2,2], [1,2]]
l2 = [[(1,'a','b'), (1,'a','b'), (1,'a','b')],[(2,'a','b'),(2,'a','b')]]
out = [[(1,'a','b'), (1,'a','b'), (1,'a','b')],[(2,'a','b'),(2,'a','b')]]

l1 = [[0,1], [0,0]]
l2 = [[0, (3, 'x','y')],[0,0]]
out = [[(3, 'x','y')],[]]

這不只是提供了所需的輸出。

op =[]
def ml(l1, l2):
    for x,y in zip(l1,l2):
        sl =[] 
        for a,b in zip(x,y):
            if a:
                sl.append(b)
        op.append(sl)
    return op

print(ml(l1, l2))

如果輸出不符合要求,請說明。

暫無
暫無

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

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