📌  相关文章
📜  Python|删除存在于另一个子列表中的子列表

📅  最后修改于: 2022-05-13 01:54:41.352000             🧑  作者: Mango

Python|删除存在于另一个子列表中的子列表

给定一个列表列表,编写一个Python程序,从给定列表列表中删除存在于另一个子列表中的子列表。

例子:

Input : [['a', 'b', 'c'], ['a', 'c'], ['a', 'b', 'c'], ['d']]
Output : [['a', 'b', 'c'], ['d']]

Input : [[1], [1, 2], [1, 2, 3], [0], [0, 1]]
Output : [[1, 2, 3], [0, 1]]


方法 #1:使用Python Set (如果列表的顺序无关紧要)

这种方法利用Python。创建两个空列表“curr_res”来存储当前子列表和“result”来存储最终的子列表。将给定列表列表中的子列表转换为集合并按长度以相反的顺序对它们进行排序,以便您可以遍历它们并将每个集合添加到curr_res中,前提是它不是任何现有集合的子集curr_res
这种方法的唯一缺点是它可能以无序的方式产生结果(因为集合是无序的)。

# Python3 program to remove sublists from
# list of lists that are in another sublist
  
def removeSublist(lst):
    curr_res = []
    result = []
    for ele in sorted(map(set, lst), key = len, reverse = True):
        if not any(ele <= req for req in curr_res):
            curr_res.append(ele)
            result.append(list(ele))
          
    return result
      
# Driver code
lst = [['a', 'b', 'c'], ['a', 'b'], ['a', 'b', 'c'], ['d']]
print(removeSublist(lst))
输出:
[['c', 'b', 'a'], ['d']]


方法 #2:使用Python字典(如果列表的顺序很重要)

Dict 可能并不总是产生有序的输出,因此您可以使用集合模块中的OrderedDict

# Python3 program to remove sublists from
# list of lists that are in another sublist
from collections import OrderedDict
  
def removeSublist(lst):
    curr_result = []
    result = []
    for ele in sorted(map(OrderedDict.fromkeys, lst), key = len, reverse = True):
        if not any(ele.keys() <= req.keys() for req in curr_result):
            curr_result.append(ele)
            result.append(list(ele))
              
    return result
      
# Driver code
lst = [['a', 'b', 'c'], ['a', 'b'], ['a', 'b', 'c'], ['d']]
print(removeSublist(lst))
输出:
[['a', 'b', 'c'], ['d']]