2017-02-20 95 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

確定這裏是我試圖找到升序排列順序,可能是工作:

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順序序列。請幫助

+1

和我們自己的努力? :) –

+0

你可以學習[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)並創建一個[Minimal,Complete,and Verifiable](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)) 
相關問題