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