如何计算列表中最大的重复次数?

hek*_*ran 10 python list

如果我在Python中有一个列表

[1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1]
Run Code Online (Sandbox Code Playgroud)

如何计算任何元素的最大重复次数?在这种情况下,2最多重复4次,1最多重复3次.

有没有办法做到这一点,但也记录最长的运行开始的索引?

Nad*_*mli 42

使用groupby,它按值分组元素:

from itertools import groupby
group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1])
print max(group, key=lambda k: len(list(k[1])))
Run Code Online (Sandbox Code Playgroud)

以下是行动中的代码:

>>> group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1])
>>> print max(group, key=lambda k: len(list(k[1])))
(2, <itertools._grouper object at 0xb779f1cc>)
>>> group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3])
>>> print max(group, key=lambda k: len(list(k[1])))
(3, <itertools._grouper object at 0xb7df95ec>)
Run Code Online (Sandbox Code Playgroud)

从python文档:

groupby()的操作类似于Unix中的uniq过滤器.每次键函数的值发生变化时,它都会生成一个中断或新组

# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D
Run Code Online (Sandbox Code Playgroud)

如果您还想要最长运行的索引,您可以执行以下操作:

group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3])
result = []
index = 0
for k, g in group:
   length = len(list(g))
   result.append((k, length, index))
   index += length

print max(result, key=lambda a:a[1])
Run Code Online (Sandbox Code Playgroud)