python對list去重的各種方法

2021-08-10 14:43:11 字數 1509 閱讀 9702

最簡單的思路就是:

ids=[

1,2,

3,3,

4,2,

3,4,

5,6,

1]news_ids=

forid

inids:if

idnot

innews_ids

:news_ids.(

id)print

news_ids

這樣也可行,但是看起來不夠爽。

另外乙個解決方案就是用set:

ids=[

1,4,

3,3,

4,2,

3,4,

5,6,

1]ids=

list

(set

(ids

))

這樣的結果是沒有保持原來的順序。

最後通過這種方式解決:

ids=[

1,4,

3,3,

4,2,

3,4,

5,6,

1]news_ids

=list

(set

(ids

))news_ids

.sort

(key

=ids

.index

)# 感謝網友:@magic 指正。

文章一開始就提到itertools.grouby, 如果不考慮列表順序的話可用這個:

ids=[

1,4,

3,3,

4,2,

3,4,

5,6,

1]ids.

sort

()it

=itertools

.groupby

(ids

)fork,

ginit:

print

k

關於itertools.groupby的原理可以看這裡:

in[5

]:ids=[

1,4,

3,3,

4,2,

3,4,

5,6,

1]in[

6]:func

=lambdax,

y:xif

yinxel***+

[y]in

[7]:reduce

(func,[,

]+ids)

out[7]:

[1,4

,3,2

,5,6

]

上面是我在ipython中執行的**,其中的 lambda x,y:x if y in x else x + [y] 等價於 lambda x,y: y in x and x orx+[y]

。 思路其實就是先把ids變為[, 1,4,3,......] ,然後在利用reduce的特性。reduce解釋參看這裡:

python中對list去重的方法

lista 1 2 1 2 3 4 2 第一種print set lista 輸出型別為 class set 因為型別是無序集合 所以每次順序都會變輸出結果為 順序不一致 且型別發生改變 第二種print list set lista 輸出型別為 class list 因為是把set強轉成list ...

對List中物件的去重

今天專案中遇到了乙個對list中物件去重的問題。首先對於我們自己系統中的物件我們只要重寫該物件的 equal 和 hashcode 即可 利用物件中的能夠唯一確定物件的屬性 但是我遇到的不是本系統的物件,而是另乙個系統中的物件,我本身是無法對其進行重寫的。我的處理方法是遍歷list,利用map un...

對List中物件的去重

今天專案中遇到了乙個對list中物件去重的問題。首先對於我們自己系統中的物件我們只要重寫該物件的 equal 和 hashcode 即可 利用物件中的能夠唯一確定物件的屬性 但是我遇到的不是本系統的物件,而是另乙個系統中的物件,我本身是無法對其進行重寫的。我的處理方法是遍歷list,利用mapniq...