簡體   English   中英

如何從多個列表中刪除多個列表?

[英]How to remove multiple lists from the multiple lists?

我有兩個清單:

l1 = [[1,2,3,4,5], [1,2,4,6,7]]
l2 = [[1,2,3,4,5], [1,2,4,6,7], [1,2,3,6,8], [1,2,3,0,9], [1,2,6,7,6]]

我想創建一個新列表l3 ,其中包含l1中沒有的l2項。 像這樣:

l3 = l2-l1

因此,我期望l3為:

l3 = [[1,2,3,6,8], [1,2,3,0,9], [1,2,6,7,6]]

我該如何實現? 任何解決方案在python ..中使用remove()或delete()?

做就是了:

l3 = [lst for lst in l2 if lst not in l1]

為O(1)成員資格測試構建一組元組。 (在您的瑣碎示例中,這不是必需的,但我假設使用的是大型列表。)然后通過列表理解進行過濾。

>>> checker = set(map(tuple, l1))
>>> [l for l in l2 if tuple(l) not in checker]
[[1, 2, 3, 6, 8], [1, 2, 3, 0, 9], [1, 2, 6, 7, 6]]

使用以下代碼:

l1 = [[1,2,3,4,5], [1,2,4,6,7]]
l2 = [[1,2,3,4,5], [1,2,4,6,7], [1,2,3,6,8], [1,2,3,0,9], [1,2,6,7,6]]

l3=[]

for i in l2:
    if i not in l1:
        l3.append(i)

如果要刪除l1中的l2子列表,並使用其余子列表創建一個新列表,請嘗試以下操作:

l1 = [[1,2,3,4,5], [1,2,4,6,7]]
l2 = [[1,2,3,4,5], [1,2,4,6,7], [1,2,3,6,8], [1,2,3,0,9], [1,2,6,7,6]]

for sub in l1:
    if sub in l2:
        l2.remove(sub)

l3 = l2[:]

>>> l1
[[1, 2, 3, 4, 5], [1, 2, 4, 6, 7]]
>>> l2
[[1, 2, 3, 6, 8], [1, 2, 3, 0, 9], [1, 2, 6, 7, 6]]
>>> l3
[[1, 2, 3, 6, 8], [1, 2, 3, 0, 9], [1, 2, 6, 7, 6]]

使用Itertool:

import itertools
k = l2+l1
k = sorted(k)
list(k for k,_ in itertools.groupby(k))

itertools為此類問題提供了最快,最強大的解決方案,並且隨着列表大小的增加,在時間方面將非常有效,

俗話說:“當您在羅馬時,就像羅馬人一樣。”這是實現解決方案的一種Python方法。

如果順序和類型不是至關重要的,請使用集合 它們速度很快,類似於您的示例:

set1 = {tuple(l) for l in l1}
set2 = {tuple(l) for l in l2}
set2 - set1
# {(1, 2, 3, 0, 9), (1, 2, 3, 6, 8), (1, 2, 6, 7, 6)}

前兩行將列表轉換成(無序)元組集,例如

{(1, 2, 4, 6, 7), (1, 2, 3, 4, 5)}
{(1, 2, 4, 6, 7), (1, 2, 3, 4, 5), (1, 2, 3, 0, 9), (1, 2, 3, 6, 8), (1, 2, 6, 7, 6)}

這些形式允許進行set操作,即等效於set2set1之差的一種操作。

>>> l1 = [[1,2,3,4,5],[1,2,4,6,7]]
>>> l2 = [[1,2,3,4,5],[1,2,4,6,7],[1,2,3,6,8],[1,2,3,0,9],[1,2,6,7,6]]
>>> for i in l1:
>>> if i in l2:
>>>     del l2[l2.index(i)]
>>> print(l2)

暫無
暫無

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

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