2017-02-20 2 views
-1

У меня есть список [1,3,4,5,2,7,8,9,11,10,9,8,7,6,7,8], в этом случае у нас может быть последовательность вроде [1,3,4,5],[7,8,9,11], [11,10,9,8,7,6], поэтому мне нужно написать логику, чтобы найти самую длинную последовательность подсписок (последняя в примере). Список будет положительным целым числом, но может быть любым порядком (asc, desc).найти самый длинный последовательный подсписок из списка, используя python

Ok вот моя попытка найти по возрастанию последовательность заказа и, вероятно, работает:

l = [1,3,4,3,2,1,7,8,9,11,12,12,8,7,6,7,8] 
ll = [] 
temp = l[0] 
ll.append(l[0]) 
keyval = {} 

for x in range(1,len(l)): 
    #print (str(x)+ " :"+str(l[x])) 
    if l[x] >= temp : 
     ll.append(l[x]) 
     temp = l[x] 
     #print (ll) 
    else: 
     keyval[len(ll)] = ll 
     ll=[] 
     temp = l[x] 

max_key = max(keyval.keys()) 
print (keyval[max_key]) 

выход: [7, 8, 9, 11, 12, 12]

Но я не найти логики для интеграции для последовательности порядка desc. Pls помочь

+1

и наши собственные попытки? :) –

+0

Вы можете узнать [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и создать [Минимальный, Полный и Подтверждаемый] (http://stackoverflow.com/help/mcve). Это облегчает нам помощь. –

+0

Не в состоянии думать о правильной логике, я могу опубликовать какую-то программу, но это не достойно этого. –

ответ

0

Возможное решение (хотя довольно уродливый :-):

def longest_consecutive(values, elem): 
    global long 
    if not values or values[-1] + 1 == elem: 
     values.append(elem) 
     if len(values) > len(long): 
      long = values[:] # shallow copy 
    else: 
     values = [] 
    return values 

example = [1, 3, 4, 5, 2, 7, 8, 9, 11, 10, 9, 8, 7, 6, 7, 8] 
long = [] # modified by reducing function 
longest = [] 
reduce(longest_consecutive, example, []) 
longest.append(long) 
reduce(longest_consecutive, example[::-1], []) # [::-1] means reverse order 
longest.append(long[::-1]) # result must be reversed too 
print(max(longest)) 

 Смежные вопросы

  • Нет связанных вопросов^_^