查找列表中连续重复数字的最大长度(python)

时间:2016-04-06 04:30:04

标签: python

这是我第一次在stackoverflow上提问。我在网上做了很多搜索,但没找到我想要的东西。我的问题是如何使用python查找列表中连续重复数字(或一般元素)的最大长度。我写了下面这个功能正常,但我想知道是否有更好的方法来做到这一点或改进我的代码。非常感谢!

{{1}}

以最大长度表示以下内容:

[1,1,2,2,2,4],M = 3(2次重复3次);

[1,2,1,2,1],M = 1(1和2仅重复一次)。

3 个答案:

答案 0 :(得分:3)

您可以使用itertools

In [8]: import itertools

In [9]: z = [(x[0], len(list(x[1]))) for x in itertools.groupby(a)]

In [10]: z
Out[10]: [(1, 2), (2, 3), (3, 1)]

元组采用(item, count)格式。如果存在给定数量的多次运行,则也会相应地对它们进行分组。见下文。

In [11]: a = [1,1,1,1,1,2,2,2,2,2,1,1,1,3,3]

In [12]: z = [(x[0], len(list(x[1]))) for x in itertools.groupby(a)]

In [13]: z
Out[13]: [(1, 5), (2, 5), (1, 3), (3, 2)]

从这里获得最大值并不难。

In [15]: max(z, key=lambda x:x[1])[1]
Out[15]: 5

答案 1 :(得分:0)

使用熊猫系列:

x = [1, 1, 2, 2, 2, 4]

import pandas as pd
pd.Series(x).value_counts()

会返回:

2    3
1    2
4    1
dtype: int64

或者,仅获取最大值计数:

pd.Series(x).value_counts().max()

哪个返回:

3

答案 2 :(得分:0)

longest_fragment = 0
current_fragment = 0

a = int(input())
last_input = a # why do I assign last_input here?
while a:
    if a == last_input:
        current_fragment += 1
    else:  # why is current_fragment assigned 1 in this clause?
        if current_fragment > longest_fragment:
            longest_fragment = current_fragment
            current_fragment = 1
    last_input = a
    a = int(input())

longest_fragment = max(longest_fragment, current_fragment) 
# why didn't i use max in the loop?
# why am I checking again down here anyway?

print('The longest fragment was:', longest_fragment)