您如何查找列表中连续重复出现的最大字符串数?

时间:2020-02-17 23:12:14

标签: python algorithm

例如,列表看起来像这样:

['ABC', 'ABC', 'XYZ', 'ABC', 'ABC', 'ABC']

您传递了'ABC' 它应该返回数字3,因为'ABC'连续重复的最大次数是3。 您将如何去做?

我尝试遍历列表,检查索引是否为'ABC',下一个索引是否为'ABC',但这几乎找不到最大数目。

2 个答案:

答案 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总是取最后一个,这要归功于排序将始终是最高的那个出现次数。