user6820366 - 1 month ago 11
Python Question

# longest decreasing sublist inside a given list

I wanted to find the longest decreasing sub sequence inside a given list for example L = [1, 2, 1, 2, 1, 2, 1, 2, 1], the result should be [2,1] however I cant seem to produce that result. Can someone tell me why it doesn't work ? The output is something [0,2,1,2,1,2,1,2,1] Nevermind the first zero but the result should produce [2,1].

Here's a code I tried

``````L = [1, 2, 1, 2, 1, 2, 1, 2, 1]

current = [0]
smallest = []

for i in  range(len(L)):
if i < (len(L)-1):
if L[i] >= L[i+1]:
current.append(L[i])

else :
if L[i] < current[-1]:
current.append(L[i])

elif i>= (len(L)-1):
if L[-1]<L[i-1]:
current.append(L[i])
else:
current = [i]
if len(current) > len(smallest):
smallest = current
``````

Result : [0,2,1,2,1,2,1,2,1]

Desired Result : [2,1]

Answer

when you say `current = [0]`, it actually adds `0` to the list, maybe you want `current = [L[0]]`.
See this:

``````def longest_decreasing_sublist(a):
lds, current = [], [a[0]]
for val in a[1:]:
if val < current[-1]: current.append(val)
else:
lds = current[:] if len(current) > len(lds) else lds
current = [val]
lds = current[:] if len(current) > len(lds) else lds
return lds

L = [1, 2, 1, 2, 1, 2, 1, 2, 1]
print (longest_decreasing_sublist(L))
# [2, 1]
``````
Comments