首页 > 解决方案 > 如何在python中找到一个数字的最大连续出现次数

问题描述

我想找出python中一个数字连续出现的最大次数。我正在使用堆栈溢出中的以下代码。

from itertools import groupby
b= [1,2,45,55,5,4,3,2,5,5,6,5456,5456,5456,7,67,6,6]

print(b)

def occurrence():
    occurrence, num_times = 0, 0
    for key, values in groupby(b, lambda x : x):
        val = len(list(values))
        if val >= occurrence:
            occurrence, num_times =  key, val
    return occurrence, num_times

occurrence, num_times = occurrence()
print("%d occurred %d times" % (occurrence, num_times))

我得到以下答案:

5 occurred 2 times

答案应该是 5456,因为它出现了 3 次。任何机构都可以帮我解决这个问题吗?

标签: python

解决方案


您可以通过使用内置max函数来简化该代码来查找最大值num_times

from itertools import groupby

b = [1, 2, 45, 55, 5, 4, 3, 2, 5, 5, 6, 5456, 5456, 5456, 7, 67, 6, 6]

num_times, occurrence = max((len(list(values)), key) for key, values in groupby(b))
print("%d occurred %d times" % (occurrence, num_times))

输出

5456 occurred 3 times

没有必要给出groupby那个低效的lambda x: x:如果你不给它一个 key 函数,它默认使用 identity 函数。


FWIW,有一种更有效的方法来计算groupby组的长度。在这里没关系,但是当组很大时它很方便。与其将组转换为列表并获取其长度,我们可以遍历组并使用内置函数sum来计算组中的项目。只是改变

len(list(values))

sum(1 for _ in values)

推荐阅读