查找列表中不重复的项目数

Posted

技术标签:

【中文标题】查找列表中不重复的项目数【英文标题】:Finding the number of items in a list that are not duplicated 【发布时间】:2021-12-19 14:52:25 【问题描述】:

我有一份水果清单,清单中有一些重复项。我不在列表中的唯一项目之后,也不是在计算唯一项目的数量。如果我想要这些细节,我会简单地使用一套。

我想计算列表中不重复的水果数量,即柠檬、橙子、番茄、百香果 = 4

这是我的代码,它工作正常,但由于使用嵌套循环而速度很慢。

fruits=['apple','pear','pear','apple','strawberry','lemon','orange','strawberry','tomato','passionfruit']

fruits_len=len(fruits)

uniq=0

for loop1 in range(0,fruits_len):
    
    flag=0
    for loop2 in range (0,fruits_len):
        
        if loop1==loop2:
            continue
       
        if fruits[loop1]==fruits[loop2]:
            flag=1
            break

    if flag==0:
        uniq+=1

print(f'There are uniq fruits not duplicated in the fruits list  ')

代码产生以下正确结果。

runfile('C:/A/untitled0.py', wdir='C:/A')
There are 4 fruits not duplicated in the fruits list  

唯一的问题是在更大的列表上我的代码会很慢。我想以最有效的方式解决上述问题。我试图设计一个使用列表推导的解决方案,但它很尴尬,因为两个嵌套循环之间有代码。

如何让我的代码运行得更快? (向能想出最快解决方案的人吹嘘)

谢谢彼得

【问题讨论】:

【参考方案1】:

您可以使用 dict 来存储数组中元素的计数并选择仅出现一次的元素

fruits=['apple','pear','pear','apple','strawberry','lemon','orange','strawberry','tomato','passionfruit']

histogram = 

for item in fruits:
  if item not in histogram:
    histogram[item] = 1
  else:
    histogram[item] += 1

print(len([ i for i in histogram if histogram[i] == 1]))

输出

4

时间

CPU times: user 2 µs, sys: 1 µs, total: 3 µs
Wall time: 6.2 µs

【讨论】:

以上是关于查找列表中不重复的项目数的主要内容,如果未能解决你的问题,请参考以下文章

Python:在浮动列表中查找最小项目的索引[重复]

查找给定 40 亿个整数中不存在的整数 [重复]

列表 - 如何查找项目出现的次数[重复]

CSS列表悬停在Google Chrome中不起作用[重复]

VBA - Excel列表框 - 在向第二个列表框添加项目时查找重复项

如何查找相同项目的列表索引[重复]