列表有加法,列表的加法就是列表的拼接。
在列表中,沒有減法操作,但有時我們需要計算兩個列表的差異值,一般的求列表差異值的方法只能求得不存在重復元素的差異值,但是當元素存在重復現象,那求得的差異值並不是我們真正想要的,現發現了一個高級的求出列表差異值的方法,不僅可以得到差異值元素,還能得到相差的個數,真是妙,分享給大家 ~
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]
注意,在用這個方法求差值的時候不同的減數和被減數得到的結果是不同的,要根據具體需要賦值。