簡體   English   中英

僅保留列表中唯一項目的最有效方法?

[英]Most efficient way of keeping only the unique items in a list?

所以我對Python比較陌生,試圖弄清楚在列表中只保留唯一項目的最佳方法。 我目前的實現涉及計數器,字典和列表推導,但我不確定什么可能更快。

這是我嘗試過的一個例子:

l = ['a', 'b', 'a']
d = dict(Counter(l))
[key for key, val in d.items() if val == 1]
>>> ['b']

此外,這只適用於字符串而不是整數,我不知道為什么。

你只想要一次存在的東西嗎?

>>> c=Counter(['a','b','a'])
>>> [n for n in c if c[n]==1]
['b']
>>> c=Counter([1,2,3,2,3,4,5,6,5,6])
>>> [n for n in c if c[n]==1]
[1, 4]

或者只是一系列獨特的東西?

>>> set([1,2,3,2,3,4,5,6,5,6])
set([1, 2, 3, 4, 5, 6])

Python有一個內置類型,用於確保列表中的成員是唯一的,它是一個集合 使用你的例子:

l = ['a', 'b', 'a']
set(l)
>>> ['a','b']

通常,您可以通過從列表轉換為集合並再次返回來從列表中“清洗”重復成員。 例如:

l = ['a', 'b', 'a']
list(set(l))
>>> ['a','b']

這會將列表重新轉換為可變(可編輯)列表,並確保性能和便利性的最佳組合。

你做這件事的方式沒有錯。 雖然這個詞是超級愚蠢的。 這非常有效,但只有在“密鑰”全部可以清洗時才有效

[k for k,v in Counter(L).iteritems() if v==1]

如果要刪除重復項,請使用 ,然后將結果重新轉換為列表:

ls = [1, 2, 3, 3, 3, 'a', 'b', 'b', 'c']
unique = list(set(ls))
# unique is ['a', 1, 2, 3, 'c', 'b']

請注意,此操作不會保留元素的順序。

如果您不關心訂單,只需使用set() 但是,以下將保留順序:

l = ['a', 'b', 'c', 'a', 'c', 'd']

a = []
for item in l:
   if item not in a: a.append(item)

或者只保留唯一的項目:

l = [item for item in l if l.count(item) == 1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM