【问题标题】:Finding the differences between two nested lists查找两个嵌套列表之间的差异
【发布时间】:2016-07-21 21:32:44
【问题描述】:

我有一个嵌套列表和另一个嵌套列表,它是第一个列表的子集:

lst = [[1, 2], [3, 4], [1, 2], [5, 6], [8, 3], [2, 7]]
sublst = [[1, 2], [8, 3]]

如何找到不在子列表中的内部列表。使用上述示例所需的输出是:

diff = [[3, 4], [5, 6], [2, 7]]

【问题讨论】:

    标签: python list


    【解决方案1】:

    使用列表推导:

    In [42]: lst = [[1, 2], [3, 4], [1, 2], [5, 6], [8, 3], [2, 7]]
    
    In [43]: sublst = [[1, 2], [8, 3]]
    
    In [44]: [x for x in lst if x not in sublst]
    Out[44]: [[3, 4], [5, 6], [2, 7]]
    

    filter():

    In [45]: filter(lambda x:x not in sublst,lst)
    Out[45]: [[3, 4], [5, 6], [2, 7]]
    

    【讨论】:

      【解决方案2】:

      如果您将列表列表转换为元组列表,那么您可以从它们创建集合并使用集合差分运算符:

      lst = [[1, 2], [3, 4], [1, 2], [5, 6], [8, 3], [2, 7]]
      sublst = [[1, 2], [8, 3]]
      
      def tuples(lst): return [tuple(l) for l in lst]
      
      print set(tuples(lst)) - set(tuples(sublst))
      

      将打印:

      set([(5, 6), (2, 7), (3, 4)])
      

      对于庞大的列表,它可能比评估 [x for x in lst if x not in sublst] 更快

      【讨论】:

      • set(map(tuple, lst)) - set(map(tuple, sublst)) 似乎更 Pythonic
      猜你喜欢
      • 2019-10-01
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多