今天這篇文章主要介紹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.rxbbx.com)部分圖文轉自網絡,刊登本文僅為傳播信息之用,絕不代表贊同其觀點或擔保其真實性。若有來源標注錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯系,我們將及時更正、刪除,謝謝