1. 程式人生 > 其它 >python 統計兩個列表的差異值

python 統計兩個列表的差異值

列表有加法,列表的加法就是列表的拼接。

在列表中,沒有減法操作,但有時我們需要計算兩個列表的差異值,一般的求列表差異值的方法只能求得不存在重複元素的差異值,但是當元素存在重複現象,那求得的差異值並不是我們真正想要的,現發現了一個高階的求出列表差異值的方法,不僅可以得到差異值元素,還能得到相差的個數,真是妙,分享給大家 ~

1. 簡單的求列表差異值的2種方法:

適用場景:不存在重複元素

方法一:

In [1]: list1 = [1, 2, 3, 4, 5, 6, 7, 8]

In [2]: list2 = [2, 3, 5, 6, 7]

In [3]: list(set(list1)-set(list2))
Out[3]: [8, 1, 4]

方法二:

In [5]: list1 = [1, 2, 3, 4, 5, 6, 7, 8]

In [6]: list2 = [2, 3, 5, 6, 7]

In [7]: [i for i in list1 if not i in list2]
Out[7]: [1, 4, 8]

不適用場景:列表中存在重複元素

'''
學習中遇到問題沒人解答?小編建立了一個Python學習交流群:531509025
尋找有志同道合的小夥伴,互幫互助,群裡還有不錯的視訊學習教程和PDF電子書!
'''
In [8]: list1 = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]

In [9]: list2 = [1, 2, 3, 3, 4, 4, 5]

In [10]: list(set(list1)-set(list2))
Out[10]: []

In [11]: [i for i in list1 if not i in list2]
Out[11]: []

可以看到,這時候無論用哪一種方法都無法得到我們想要的結果,這時候統計2個列表差異值的高階方法出來了。

2. 得到2個列表的差異值並給出差異值個數的高階方法

In [42]: from collections import Counter

In [43]: list1 = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]

In [44]: list2 = [1, 2, 3, 3, 4, 4, 5]

In [45]: for key, value in (Counter(list1)-Counter(list2)).items():
    ...:     print("key = ", key, "value = ", value)
    ...:
key =  2 value =  1
key =  3 value =  1
key =  4 value =  2
key =  5 value =  4

In [46]: list((Counter(list1) - Counter(list2)).elements())
Out[46]: [2, 3, 4, 4, 5, 5, 5, 5]

注意,在用這個方法求差值的時候不同的減數和被減數得到的結果是不同的,要根據具體需要賦值。