测试两个列表是否相等

时间:2014-12-22 15:42:34

标签: python list

假设我在Python中有两个列表列表,

l1 = [['a',1], ['b',2], ['c',3]]
l2 = [['b',2], ['c',3], ['a',1]]

l1中{@ 1}}的元素只是l2中元素的一些排列,因此测试它们是否相同的最优雅的方法是什么?

请注意,对普通列表see here执行此操作,但这会使用set,但这不适用于列表列表。

3 个答案:

答案 0 :(得分:11)

l1 = [['a',1], ['b',2], ['c',3]]
l2 = [['b',2], ['c',3], ['a',1]]
print sorted(l1) == sorted(l2)

结果:

True

答案 1 :(得分:1)

Set不适用于列表列表,但适用于元组列表。您可以map每个子列表进行元组并使用set作为:

>>> l1 = [['a',1], ['b',2], ['c',3]]
>>> l2 = [['b',2], ['c',3], ['a',1]]
>>> print set(map(tuple,l1)) == set(map(tuple,l2))
True

答案 2 :(得分:0)

对于上述问题的一个班轮解决方案,请参阅this question

中的答案

我在这里引用相同的答案。无论您的输入是简单列表还是嵌套列表,这都将起作用。

  

让两个列表为list1和list2,您的要求是   确保两个列表是否具有相同的元素,然后按照我的说法,   以下将是最好的方法: -

if ((len(list1) == len(list2)) and
   (all(i in list2 for i in list1))):
    print 'True'
else:
    print 'False'
     

上面的代码将根据您的需要工作,即是否全部   list1的元素在list2中,反之亦然。 两个列表中的元素不必按照相同的顺序排列。

     

但是如果你想检查list1的所有元素是否都是   如果出现在list2中,那么你需要使用下面的代码片段   只: -

if all(i in list2 for i in list1):
    print 'True'
else:
    print 'False'
     

不同的是,如果list2包含一些,则后者将打印True   额外的元素以及list1的所有元素。简单来说,   它将确保list1的所有元素都应该存在   list2,无论list2是否有一些额外的元素。