我正在尝试构造这个函数,但是我不知道如何停止函数多次计算相同的重复项。有人能帮我吗?
def count_duplicates(seq):
'''takes as argument a sequence and
returns the number of duplicate elements'''
fir = 0
sec = 1
count = 0
while fir < len(seq):
while sec < len(seq):
if seq[fir] == seq[sec]:
count = count + 1
sec = sec + 1
fir = fir + 1
sec = fir + 1
return count
输入:count_duplicates([-1,2,4,2,0,4,4])
输出:4
它在这里失败,因为输出应该是3
。
您只需从列表中创建一个
set
,它将自动删除重复项,然后计算创建的集合和原始列表的长度之差。 就像这样:如果您不被允许或不想使用任何内置快捷方式(无论出于何种原因),您可以使用long(er)方式:
最后,就您的代码而言,@AlanB在his answer中很好地概述了它的问题。我选择不麻烦更正您的代码,因为在我看来这是一个XY Problem。显然,您有某种编程背景,但是您复杂的
while
循环只是而不是Python中的工作方式。电动汽车的解决方案。在我看来,Kounis是最简单的,也是你应该使用的。但是,如果您想坚持您的代码,以下是它不起作用的原因:
通过复杂的
while
循环,您基本上可以说“对于我列表中的每个项,当您找到重复项时,递增count
”,这基本上就是您想要的。但由于有两个“4个重复”,它会增加count
一个额外的时间。哪些输出:
(5,6)
对不正确。要解决此问题,只需在
if
语句中添加一个条件,以防止对某个项进行两次比较:输出期望结果:
但是再一次,做
更简单,效果也一样。
编辑:
我意识到我的示例中没有使用while循环。
接近熊猫。此方法适用于具有重复项的大列表。
相关问题 更多 >
编程相关推荐