您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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]]
python 2022/1/1 18:34:37 有212人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶