当前位置: 首页 > 面试题库 >

如何在python中比较列表/集合的列表?

花阳秋
2023-03-14
问题内容

比较两个列表/集合并输出差异的最简单方法是什么?是否有任何内置函数可以帮助我比较嵌套列表/集?

输入:

First_list = [['Test.doc', '1a1a1a', 1111], 
              ['Test2.doc', '2b2b2b', 2222],  
              ['Test3.doc', '3c3c3c', 3333]
             ]  
Secnd_list = [['Test.doc', '1a1a1a', 1111], 
              ['Test2.doc', '2b2b2b', 2222], 
              ['Test3.doc', '8p8p8p', 9999], 
              ['Test4.doc', '4d4d4d', 4444]]

预期产量:

Differences = [['Test3.doc', '3c3c3c', 3333],
               ['Test3.doc', '8p8p8p', 9999], 
               ['Test4.doc', '4d4d4d', 4444]]

问题答案:

因此,您需要两个项目列表之间的区别。

first_list = [['Test.doc', '1a1a1a', 1111], 
              ['Test2.doc', '2b2b2b', 2222], 
              ['Test3.doc', '3c3c3c', 3333]]
secnd_list = [['Test.doc', '1a1a1a', 1111], 
              ['Test2.doc', '2b2b2b', 2222], 
              ['Test3.doc', '8p8p8p', 9999], 
              ['Test4.doc', '4d4d4d', 4444]]

首先,我将每个列表列表变成一个元组列表,这样,由于元组是可哈希化的(列表不是),因此您可以将元组列表转换为一组元组:

first_tuple_list = [tuple(lst) for lst in first_list]
secnd_tuple_list = [tuple(lst) for lst in secnd_list]

然后可以进行设置:

first_set = set(first_tuple_list)
secnd_set = set(secnd_tuple_list)

编辑(由sdolan建议):您可以在一个列表中为每个列表完成最后两个步骤:

first_set = set(map(tuple, first_list))
secnd_set = set(map(tuple, secnd_list))

注意:map是一个功能性的编程命令,它将第一个参数中的tuple函数(在本例中为函数)应用于第二个参数中的每个项(在本例中为列表列表)。

并找到集合之间的对称差异:

>>> first_set.symmetric_difference(secnd_set) 
set([('Test3.doc', '3c3c3c', 3333),
     ('Test3.doc', '8p8p8p', 9999),
     ('Test4.doc', '4d4d4d', 4444)])

注意first_set ^ secnd_set等效于symmetric_difference

另外,如果您不想使用集合(例如,使用python 2.2),则非常简单。例如,具有列表理解:

>>> [x for x in first_list if x not in secnd_list] + [x for x in secnd_list if x not in first_list]
[['Test3.doc', '3c3c3c', 3333],
 ['Test3.doc', '8p8p8p', 9999],
 ['Test4.doc', '4d4d4d', 4444]]

或带有功能filter命令和lambda功能。(您必须同时测试两种方法并结合使用)。

>>> filter(lambda x: x not in secnd_list, first_list) + filter(lambda x: x not in first_list, secnd_list)

[['Test3.doc', '3c3c3c', 3333],
 ['Test3.doc', '8p8p8p', 9999],
 ['Test4.doc', '4d4d4d', 4444]]


 类似资料:
  • 给出两个列表: 如何编写

  • 问题内容: 我有一个 清单清单 : 我想转换为一个 集合, 即删除重复列表并从中创建一个仅包含 唯一 列表的新列表。 在上述情况下,所需答案将是 但是当我这样做时,它给了我错误 TypeError:无法散列的类型:“列表” 你能解决我的问题吗?提前致谢! 问题答案: 由于列表是可变的,因此不能进行哈希处理。最好的选择是将它们转换为元组并形成一个集合,像这样 我们一次遍历一个列表,将其转换为一个元组

  • 本文向大家介绍关于Python元祖,列表,字典,集合的比较,包括了关于Python元祖,列表,字典,集合的比较的使用技巧和注意事项,需要的朋友参考一下 定义 方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner','list'],7-9j] 1.list(str):将str转换成l

  • 问题内容: 给出两个列表: 我怎么写这样的: 问题答案: 你想要这个吗: 注意:当List处于无序状态时(例如,( 和中的 通知顺序))无用 请参阅此问题以获取更多参考:如何在python中比较列表/集合的列表? 编辑 :感谢@dr jimbob 如果要在排序后进行比较,可以使用。 但是再说一遍,如果那是因为,与众不同( 不是深度排序 ) 为此,您必须使用链接答案中的技术。由于我也在学习Pytho

  • 问题内容: 如果我有一个长长的清单:我分为两个清单: 我如何比较这两个列表以查看它们是否相等/相同,并约束它们必须具有相同的顺序? 我看到过一些问题,要求通过对两个列表进行排序来进行比较,但是在我的特定情况下,我不是要检查排序的比较,而是要检查相同的列表比较。 问题答案: 只需使用经典运算符: 如果相同索引处的元素相等,则列表相等。然后考虑订购。

  • 问题内容: 我正在尝试将一组转换为Python 2.6中的列表。我正在使用以下语法: 但是,我得到以下堆栈跟踪: 我怎样才能解决这个问题? 问题答案: 已经是清单了 你想要类似的东西吗 编辑:您的最后评论的输出 我想知道您是否做了这样的事情: