查找列表中不重复的项目数
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
【讨论】:
以上是关于查找列表中不重复的项目数的主要内容,如果未能解决你的问题,请参考以下文章
CSS列表悬停在Google Chrome中不起作用[重复]