转载来源:python中如何比较两个列表?
对两个列表的比较在平常用的是非常多的,例如你处理的数据放到了列表中,间隔一段时间又获取到了新的数据,这个时候可以通过对比来确定是否有新数据产生,以下为具体比较的几种方式。
1、python sort()方法配合==
比较符
要比较的两个列表可能顺序不一致,所以我们可以先sort()排序,这样列表中的元素位置我们就可以忽略了,因为如果两个列表相等,元素的索引也是一样的。
L1 = [1, 2, 3, 4, 5]
L2 = [5, 4, 3, 2, 1]
if L1.sort() == L2.sort():
print('they are same')
else:
print('they are different')
>> they are same
2、先转成集合,然后再用==
比较
这种方式是针对列表中有重复数据项,但我们不太关心,可以用这种方式,而且集合也不考虑元素的顺序:
L1 = [1, 2, 3, 4, 5, 2]
L2 = [5, 4, 3, 2, 1]
S1 = set(L1)
S2 = set(L2)
if S1 == S2:
print('they are same')
else:
print('they are different')
>> they are same
3、使用collection模块的方法counter()
collection.counter()
方法可以有效地比较列表,因为 counter() 函数可以计算列表中项目的出现的次数(或频率),然后输出 一个字典的格式的数据, 如:值:次数(频率), 因此如果两个列表具有完全相同的字典输出,我们可以推断这些列表是相同的,而且列表顺序对 counter() 方法是没有影响。
from collections import Counter
L1 = [1, 2, 3, 4, 5, 2]
L2 = [5, 4, 3, 2, 1]
if Counter(L1) == Counter(L2):
print('they are same')
else:
print('they are different')
>> they are different
4、用列表推导式
使用列表推导方式的原理的查找两个列表中的不同的元素,即该元素不在列表A中或不在列表B中,那么可以判断这2个列表是不同的,因为他们有不同的元素,反之可以判断他们是一样的,代码如下:
L1 = [1, 2, 3, 4, 5, 6]
L2 = [5, 4, 3, 2, 1]
r = [ x for x in L1+L2 if x not in L1 or x not in L2]
print(r)
if not r: # 空列表[] 为false,非空为true
print('they are same')
else:
print('they are different')
>> they are different
以上只是比较单层数据的列表比较,如果有嵌套类别比较,可以参考使用deepdiff
库