计算列表中的重复项数

新手上路,请多包涵

我正在尝试构造此函数,但我无法弄清楚如何停止该函数多次计算相同的重复项。有谁可以帮助我吗?

 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

原文由 Cassy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 370
1 个回答

您可以从您的列表中创建一个 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

如果您不被允许或不想使用任何内置快捷方式(无论出于何种原因),您可以采取长(呃)的方式:

 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


最后,就您的代码而言,@AlanB 在 他的回答 中很好地概述了它的问题。我选择不去修正你的代码,因为在我看来这是一个 XY 问题。很明显,您具有某种编程背景,但您的复杂 while 循环 _并不是 Python 中完成事情的方式_。

原文由 Ma0 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题