我有一个系列:
series = [0,2, 1, -2, 0, 0, 2, 3 ,1, 7]
查找连续正数最长的字符串的长度最省时的方法是什么?在此示例中,该值必须为4([2、3、1、7]的长度)
答案 0 :(得分:4)
您可以使用itertools.groupby
对正数进行分组,然后使用max
来查找最长的此类数字
>>> from itertools import groupby
>>> max((list(g) for k, g in groupby(series, key=lambda i: i > 0)), key=len)
[2, 3, 1, 7]
答案 1 :(得分:2)
来自pandas
s=pd.Series(np.sign(np.array(series)))
pd.crosstab(s,s.diff().ne(0).cumsum())
Out[495]:
col_0 1 2 3 4 5
row_0
-1 0 0 1 0 0
0 1 0 0 2 0
1 0 2 0 0 4
pd.crosstab(s,s.diff().ne(0).cumsum()).max(1)
Out[494]:
row_0
-1 1
0 2
1 4
dtype: int64
答案 2 :(得分:0)
就最省时而言,要克服一个简单的循环将很困难:
def maxPositiveRun():
count = 0
maxVal = 0
for n in series:
if n > 0:
count +=1
if count > maxVal:
maxVal = count
else:
count = 0
return maxVal
这是由最省时的假设的,您的意思是该功能运行的时间,而不是理解或编写该功能的时间。