如何获取只有唯一数字的列表? (Python)

Posted

技术标签:

【中文标题】如何获取只有唯一数字的列表? (Python)【英文标题】:How to get a list with only unique numbers? (Python) 【发布时间】:2021-11-16 20:49:24 【问题描述】:

我想编写一个程序来检查重复值并删除它们。 所以例如我想从这个:

list = [2,6,8,2,9,8,8,5,2,2]

只得到这个:

uniques = [6,9,5]

我似乎找不到一个好方法来比较每个项目,看看它们是否相等,然后将它们删除。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

使用collections.Counter:

>>> from collections import Counter                                         
>>> lst = [2,6,8,2,9,8,8,5,2,2]                                             
>>> c = Counter(lst)                                                        
>>> [x for x in c if c[x] == 1]                                             
[6, 9, 5]

除了对每个元素使用 countin 之外,这应该是 O(n) 而不是 O(n²)。

【讨论】:

【参考方案2】:

如果您也想保留元素的顺序,请遵循以下最佳方法:

uniques = list(dict.fromkeys(list))

print(uniques)

【讨论】:

【参考方案3】:
list = [2,6,8,2,9,8,8,5,2,2]
uniques = []
for i in range(len(list)):
    if list.count(list[i])==1:
        uniques.append(list[i])

【讨论】:

【参考方案4】:

鉴于您想要一个仅在列表中出现一次的值列表,这应该可行。我使用哈希图将值的计数存储在列表中,然后将计数为 1 的键添加到 unqiue

l = [2,6,8,2,9,8,8,5,2,2]
unique = []
count = 

for i in l:
    if count.get(i) is None:
        count[i] = 1
    else:
        count[i]+=1

for i in count.keys():
    if count[i] == 1:
        unique.append(i)

print(unique)

输出

[6, 9, 5]

【讨论】:

【参考方案5】:

试试这个:

lst = [2,6,8,2,9,8,8,5,2,2]
[l for l in set(lst) if lst.count(l) == 1]
# [5, 6, 9]

【讨论】:

【参考方案6】:

list = [2,6,8,2,9,8,8,5,2,2]
uniques = []
for i in list:
    if i not in uniques:
        uniques.append(i)

【讨论】:

代码有效,但如果您也添加解释,您的问题会好一些。 代码不起作用。它导致[2, 6, 8, 9, 5] 而OP 要求[6,9,5]。此外,不要将 javascript sn-ps 用于 Python 代码。

以上是关于如何获取只有唯一数字的列表? (Python)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Python 中的列表中获取具有相应出现次数的唯一值?

如何从python中的列表中获取最后一个数字[重复]

在python中获取列表中的所有唯一对,包括重复项

如何获取大于数组列表中当前元素的数字元素的计数[关闭]

python如何将列表中只出现一次的数字输出

如何在列表中获取特定值的索引 - python [重复]