Python嵌套列表去重

人生苦短
早用Python

這是工作中遇到的一個坑,首先看一下問題

raw_list = [["百度", "CPY"], ["京東", "CPY"], ["黃軒", "PN"], ["百度", "CPY"]]

列表嵌套了列表,并且有一個重復(fù)列表["百度", "CPY"],現(xiàn)在要求將這個重復(fù)元素進(jìn)行去重(重復(fù)是指嵌套的列表內(nèi)兩個元素都相同),并且保證元素順序不變,輸出還是嵌套列表,即最后結(jié)果應(yīng)該長這樣:[["百度", "CPY"], ["京東", "CPY"], ["黃軒", "PN"]]

正常Python去重都是使用set,所以我這邊也是用這種思想處理一下

In [8]: new_list = [list(t) for t in set(tuple(_) for _ in raw_list)]

In [9]: new_list
Out[9]: [['京東', 'CPY'], ['百度', 'CPY'], ['黃軒', 'PN']]

=。=以為大功告成,結(jié)果發(fā)現(xiàn)嵌套列表順序變了

好吧一步步找一下是從哪邊順序變了的

In [10]: s = set(tuple(_) for _ in raw_list)

In [11]: s
Out[11]: {('京東', 'CPY'), ('百度', 'CPY'), ('黃軒', 'PN')}

恍然大悟關(guān)于set的兩個關(guān)鍵詞:無序不重復(fù) =。=

所以從set解決排序問題基本無望了,然而我還沒有放棄,現(xiàn)在問題就變成了對于new_list怎么按照raw_list元素順序排序,當(dāng)然肯定要通過sort實現(xiàn)

翻一下Python文檔找到以下一段話
文檔地址

sort(*, key=None, reverse=False)

This method sorts the list in place, using only < comparisons between 
items. Exceptions are not suppressed - if any comparison operations     
fail, the entire sort operation will fail (and the list will likely be left in a  
 partially modified state).

 [`sort()`](https://docs.python.org/3/library/stdtypes.html?highlight=sort#list.sort "list.sort") 

accepts two arguments that can only be passed by keyword ( [keyword-only arguments](https://docs.python.org/3/glossary.html#keyword-only-parameter) ):

key specifies a function of one argument that is used to extract a  
comparison key from each list element (for example, key=str.lower).  
 The key corresponding to each item in the list is calculated once and     then used for the entire sorting process. The default value of None 
means that list items are sorted directly without calculating a separate
 key value.
開始劃重點:

sort方法通過參數(shù)key指定一個方法,換句話說,key參數(shù)的值是函數(shù)。

這個函數(shù)new_list上的每個元素會產(chǎn)生一個結(jié)果,sort通過這個結(jié)果進(jìn)行排序。

于是這里就想到求出new_list里的每一個元素在raw_list里的索引,根據(jù)這個索引進(jìn)行排序。

代碼實現(xiàn)如下:
In [13]: new_list.sort(key=raw_list.index)

In [14]: new_list
Out[14]: [['百度', 'CPY'], ['京東', 'CPY'], ['黃軒', 'PN']]

結(jié)果和期望一樣 =。=

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項目接著寫寫一名3年工作經(jīng)驗的J...
    燕京博士閱讀 7,786評論 1 118
  • 一、python 變量和數(shù)據(jù)類型 1.整數(shù) Python可以處理任意大小的整數(shù),當(dāng)然包括負(fù)整數(shù),在Python程序...
    績重KF閱讀 1,997評論 0 1
  • 最近在慕課網(wǎng)學(xué)習(xí)廖雪峰老師的Python進(jìn)階課程,做筆記總結(jié)一下重點。 基本變量及其類型 變量 在Python中,...
    victorsungo閱讀 1,917評論 0 5
  • 本文為《爬著學(xué)Python》系列第九篇文章。 從現(xiàn)在開始算是要進(jìn)入“真刀真槍”的Python學(xué)習(xí)了。之所以這么說,...
    SyPy閱讀 2,221評論 0 14
  • Python 是一種相當(dāng)高級的語言,通過 Python 解釋器把符合語法的程序代碼轉(zhuǎn)換成 CPU 能夠執(zhí)行的機(jī)器碼...
    Python程序媛閱讀 2,031評論 0 3

友情鏈接更多精彩內(nèi)容