如果我在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)
归档时间: |
|
查看次数: |
4319 次 |
最近记录: |