簡體   English   中英

從列表列表中刪除子列表

[英]Removing sublists from a list of lists

我正試圖找到解決這個問題的最快方法,比如我有一個列表列表:

myList = [[1,2,3,4,5],[2,3],[4,5,6,7],[1,2,3],[3,7]]

我希望能夠刪除作為其他列表之一的子列表的所有列表,例如我想要以下輸出:

myList = [[1,2,3,4,5],[4,5,6,7],[3,7]]

列表[2,3]和[1,2,3]被刪除,因為它們完全包含在其他一個列表中,而[3,7]沒有刪除,因為沒有一個列表包含所有這些元素。

我不限於任何一個數據結構,如果列表或集合列表更容易使用,那也沒關系。

我能想到的最好的東西是這樣的,但它並沒有真正起作用,因為我試圖在迭代它時從列表中刪除。 我試圖將它復制到一個新的列表,但不知怎的,我無法讓它正常工作。

for outter in range(0,len(myList)):
outterSet = set(myList[outter])
for inner in range(outter,len(myList)):
    innerSet = set(myList[inner])
    if innerSet.issubset(outterSet):
        myList.remove(innerSet)

謝謝。

解決問題的關鍵是集合列表:

lists = [[1,2,3,4,5],[2,3],[4,5,6,7],[1,2,3],[3,7]]

sets = [set(l) for l in lists]

new_list = [l for l,s in zip(lists, sets) if not any(s < other for other in sets)]

這將內部列表轉換為集合,將每個集合與每個其他集合進行比較以查看它是否包含在其中(使用<運算符),如果它未嚴格包含在另一個集合中,則將原始列表添加到新的列表中名單。

暫無
暫無

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

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