Python 如何改进代码以查找递增和递减序列

Python 如何改进代码以查找递增和递减序列,python,sequence,Python,Sequence,我试图写一个函数,可以找到单调递增或递减数的最长运行时间。我看过很多例子,但似乎没有一个符合这个要求:如果L=[10,4,3,8,3,4,5,7,2],那么L中单调递增数的最长运行时间是[3,4,5,7,7],L中单调递减数的最长运行时间是[10,4,3]。函数应该返回值26,因为单调递增整数的最长运行时间比单调递减数的最长运行时间长。我已经写了一个函数来解决这个问题,但它是一个蛮力方法。我认为有一个更好的方法,但我现在无法想出一个 这就是我找到所有序列所做的: def longest_run(

我试图写一个函数,可以找到单调递增或递减数的最长运行时间。我看过很多例子,但似乎没有一个符合这个要求:如果L=[10,4,3,8,3,4,5,7,2],那么L中单调递增数的最长运行时间是[3,4,5,7,7],L中单调递减数的最长运行时间是[10,4,3]。函数应该返回值26,因为单调递增整数的最长运行时间比单调递减数的最长运行时间长。我已经写了一个函数来解决这个问题,但它是一个蛮力方法。我认为有一个更好的方法,但我现在无法想出一个

这就是我找到所有序列所做的:

def longest_run(L):
    count_up = []
    count_down = []
    for i in range(len(L)):
       if (L[i+1] >= L[i]) and (L[i+1] != L[-1]):
           if L[i] <= L[i-1]:
               count_down.append(L[i]):
               count_down.append('=md') # sequence separator
               count_up.append(L[i])                              
            else:
                count_up.append(L[i])
                continue
       if L[i+1] == L[-1]:
           if L[-1] < L[i]:
               count_down.append(L[i])
               count_down.append(L[-1])
               count_up.append(L[i])
           elif L[-1] > L[i]: # if last value is greater than value in L[i]
               count_down.append(L[i])
               count_up.append(L[i])
               count_up.append(L[-1])
           break
       elif L[i+1] < L[i]:
           if L[i] > L[i-1] and i > 0: # needs at least 2 values to compare
               count_up.append(L[i])
               count_up.append('=mi')
               count_down.append(L[i]) # higher value - start new sequence
           elif L[i] <= L[i-1]:
               count_down.append(L[i])
           elif L[i] > L[i+1]:
               count_down.append(L[i])
return count_down, count_up
def最长运行时间(L):
向上计数=[]
倒计时=[]
对于范围内的i(len(L)):
如果(L[i+1]>=L[i])和(L[i+1]!=L[-1]):
如果L[i]L[i]:#如果最后一个值大于L[i]中的值
倒计时。追加(L[i])
向上计数。追加(L[i])
向上计数。追加(L[-1])
打破
以利夫L[i+1]L[i-1]和i>0:#需要至少两个值进行比较
向上计数。追加(L[i])
向上计数。追加('=mi')
倒计时。追加(L[i])#更高的值-开始新序列
以利夫L[i]L[i+1]:
倒计时。追加(L[i])
返回倒计时,倒计时
L=[10,4,3,8,3,4,5,7,7,2]

类似这样的东西:

L = [10, 4, 3, 8, 3, 4, 5, 7, 7, 2]

count_up = [[L[0]]]
count_down = [[L[0]]]

# building monotonically increasing and decreasing runs
# we spit the original list into sublists of increasing o decreasing numbers.
for i in L[1:]:
    if i >= count_up[-1][-1]:
        count_up[-1].append(i)
    else:
        count_up.append([i])
    if i <= count_down[-1][-1]:
        count_down[-1].append(i)
    else:
        count_down.append([i])

# searching the longest
longest_run = max(count_up + count_down, key=len)
L=[10,4,3,8,3,4,5,7,7,2]
向上计数=[[L[0]]
倒计时=[[L[0]]
#构建单调递增和递减运行
#我们将原始列表划分为递增或递减的子列表。
因为我在L[1:]:
如果i>=向上计数[-1][-1]:
向上计数[-1]。追加(i)
其他:
向上计数。追加([i])

如果我知道你打算用什么公式从函数创建的两个列表中导出值
26
。。。值26是最长序列的简单和,我可以做到。我想找到一种比我尝试的暴力更好的方法。