[英]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操作,即等效於set2
和set1
之差的一種操作。
>>> 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.