您可以尝试利用itertools.groupby
这样一个事实,即如果键未排序,它将分别对键进行分组(返回False
< 2 只是为了显示输出 - 您可以更改为任何您想要的)。使用groupby
,您将获得一个形式为 的迭代(key, values)
,其中values
另一个迭代包含与键相关的所有值。在这种情况下,我们不关心键(因此是_
),我们将 转换values
为一个列表,然后获取它的长度(这会产生一个长度列表,类似于[1, 1, 2]
的情况[1, 2, 1, 1]
)。然后我们从该列表中取出最后一项,这将表示最后一个元素重复的次数。从那里,我们应用返回哪个值的逻辑:
In [1]: from itertools import groupby
In [2]: def my_func(l):
...: val = [len(list(g)) for _, g in groupby(l)][-1]
...: if val < 3:
...: return False
...: return min(val, 5)
...:
In [3]:
In [4]: L = [1,1,2]
In [5]: my_func(L)
Out[5]: False
In [6]: L = [1,2,1,1]
In [7]: my_func(L)
Out[7]: False
In [8]: L = [1,2,1,1,1]
In [9]: my_func(L)
Out[9]: 3
In [10]: L = [1,1,2,2,2,2]
In [11]: my_func(L)
Out[11]: 4
In [12]: L = [1,2,1,1,1,1,1,1]
In [13]: my_func(L)
Out[13]: 5