Cas*_*ssy 0 python list count sequence duplicates
我正在尝试构建此函数,但我无法弄清楚如何停止该函数多次计算相同的重复项。有人能帮助我吗?
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
Run Code Online (Sandbox Code Playgroud)
在: count_duplicates([-1,2,4,2,0,4,4])
出去: 4
它在这里失败,因为输出应该是3
.
您可以set
从列表中创建一个会自动删除重复项的列表,然后计算创建的集合与原始列表的长度之差。像这样:
def count_duplicates(seq):
'''takes as argument a sequence and
returns the number of duplicate elements'''
return len(seq) - len(set(seq))
res = count_duplicates([-1,2,4,2,0,4,4])
print(res) # -> 3
Run Code Online (Sandbox Code Playgroud)
如果您不被允许或不想使用任何内置快捷方式(无论出于何种原因),您可以采取长期(er)的方式:
def count_duplicates2(seq):
'''takes as argument a sequence and
returns the number of duplicate elements'''
counter = 0
seen = set()
for elm in seq:
if elm in seen:
counter += 1
else:
seen.add(elm)
return counter
res = count_duplicates2([-1,2,4,2,0,4,4])
print(res) # -> 3
Run Code Online (Sandbox Code Playgroud)
最后,就您的代码而言,@AlanB 在他的回答中很好地概述了它的问题。我选择不去纠正你的代码,因为在我看来这是一个XY 问题。很明显,您具有某种编程背景,但是您的复杂while
循环并不是在 Python 中完成的方式。