python - 如何在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 次。任何机构都可以帮我解决这个问题吗?
解决方案
您可以通过使用内置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)
推荐阅读
- excel - 如果只是数据值自动发生变化,如何复制每个数据值以粘贴到另一张表中?
- c# - VS2019 Roslyn 编译器通用约束方法解析
- r - 仅使用 dplyr 选择器在多个列中改变一个值
- java - 在程序中将一个带有列表的 JSON 对象解析为 List
- node.js - apt-get 总是安装旧版本的 node.js
- c# - FtpWebRequest 可以获取根文件夹上方的文件吗?
- tableau-api - 创建表格,维度为行,日期之间的天数为列
- vba - 仅将记录返回到标记为 0 或 1 的报告
- hadoop - 强制 HiveServer2 运行 MapReduce 作业
- sql - SQL - 插入两列,一列来自表,另一列是常量