例如,列表看起来像这样:
['ABC', 'ABC', 'XYZ', 'ABC', 'ABC', 'ABC']
您传递了'ABC'
它应该返回数字3
,因为'ABC'
连续重复的最大次数是3
。
您将如何去做?
我尝试遍历列表,检查索引是否为'ABC'
,下一个索引是否为'ABC'
,但这几乎找不到最大数目。
答案 0 :(得分:0)
您可以使用itertools.groupby
(对连续元素进行分组)来执行此操作。通过不提供键功能,它将相等的元素分组。
我们需要使用sum(1 for _ in v)
来获得运行的长度(因为它是可迭代的而不是列表,所以我们不能使用len
),而max
来获取最大长度。
from itertools import groupby
def longest_run_of(lst, element):
return max(sum(1 for _ in v) for k, v in groupby(lst) if k == element)
示例:
>>> longest_run_of(lst, 'ABC')
3
>>> longest_run_of(lst, 'XYZ')
1
答案 1 :(得分:0)
尝试:
from itertools import groupby
x=['ABC', 'ABC', 'XYZ', 'ABC', 'ABC', 'ABC']
y=dict(sorted([(gr, len(list(val))) for gr, val in groupby(x, lambda el: el)], key=lambda el: el[1]))
它将为每个元素返回dict
个最大连续出现次数-因此只需{:1即可获取它:
ABC
简而言之,那里发生了什么->> y["ABC"]
3
将连续出现的事件分组在一起。
groupby
将对其进行计数。
接下来,我们对它们进行排序,以获取最后连续出现次数最多的元素。
然后我们转换为len(list(val))
-利用以下事实:如果多次出现相同的密钥-dict
总是取最后一个,这要归功于排序将始终是最高的那个出现次数。