这是我第一次在stackoverflow上提问。我在网上做了很多搜索,但没找到我想要的东西。我的问题是如何使用python查找列表中连续重复数字(或一般元素)的最大长度。我写了下面这个功能正常,但我想知道是否有更好的方法来做到这一点或改进我的代码。非常感谢!
{{1}}
以最大长度表示以下内容:
[1,1,2,2,2,4],M = 3(2次重复3次);
[1,2,1,2,1],M = 1(1和2仅重复一次)。
答案 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)