假设我在Python中有两个列表列表,
l1 = [['a',1], ['b',2], ['c',3]]
l2 = [['b',2], ['c',3], ['a',1]]
l1
中{@ 1}}的元素只是l2
中元素的一些排列,因此测试它们是否相同的最优雅的方法是什么?
请注意,对普通列表see here执行此操作,但这会使用set
,但这不适用于列表列表。
答案 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是否有一些额外的元素。