python中如何比较两个列表?
今天这篇文章主要介绍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')
...
they are same
这种方式简单直接,我没看另一种方式。
2、先转成集合,然后再用==比较
这种方式是针对列表中有重复数据项,但我们不太关心,可以用这种方式,而且集合也不考虑元素的顺序:
>>> L1 = [1,2,3,4,5]>>> L2 = [5,4,3,2,1]
>>> s1 = set(L1)
>>> s2 = set(L2)
>>> if s1 == s2:
... print('they are same')
...
they are same
3、使用collection模块的方法counter()
collection.counter()方法可以有效地比较列表,因为 counter() 函数可以计算列表中项目的出现的次数(或频率),然后输出 一个字典的格式的数据, 如:值:次数(频率), 因此如果两个列表具有完全相同的字典输出,我们可以推断这些列表是相同的,而且列表顺序对 counter() 方法是没有影响。
>>> from collections import Counter>>> L1 = [1,2,3,4,5]
>>> L2 = [5,4,3,2,1]
>>> if Counter(L1) == Counter(L2):
... print('they are same')
... else:
... print('they are not same')
...
they are same
4、用列表推导式
使用列表推导方式的原理的查找两个列表中的不同的元素,即该元素不在列表A中或不在列表B中,那么可以判断这2个列表是不同的,因为他们有不同的元素,反之可以判断他们是一样的,代码如下:
>>> L1 = [1,2,3,4,5]>>> L2 = [5,4,3,2,1]
>>> r = [ x for x in L1+L2 if x not in L1 or x not in L2]
>>> if not r:
... print('they are same')
...
they are same
以上只是比较单层数据的列表比较,如果有嵌套类别比较,可以参考使用deepdiff 库,具体限于篇幅不做扩展,感兴趣的小伙伴可以自行尝试。
以上就是列表比较的例子,欢迎留言交流。
作者: python运维技术
来源公众号:
python运维技术
本站(www.100xue.net)部分图文转自网络,刊登本文仅为传播信息之用,绝不代表赞同其观点或担保其真实性。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系(底部邮箱),我们将及时更正、删除,谢谢