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