2011-10-31 73 views
0

我需要這個函數來告訴我列表中正數的最長序列。max()函數在Jython中如何工作?

def longestSequencePos(nums): 
    index = 0 
    list = [] 
    integ = 0 

    for obj in nums: 
     if obj > 0: 
     index = index +1 
     else: 
     list.append(index) 
     index = 0 
    return max(list) 

列表應包含正數序列的所有長度,但最大值函數不起作用。

+3

它以什麼方式不起作用? –

+1

切勿使用'list'作爲變量名稱。 –

+0

調試:'print list',或者'print better_name_than_list' –

回答

0

的問題可能是你沒有添加索引時NUMS耗盡列表,所以如果列表中最長的序列結束,也不會返回正確的值:

def longestSequencePos(nums): 
    index = 0 
    list = [] 
    integ = 0 

    for obj in nums: 
     if obj > 0: 
     index = index +1 
     else: 
     list.append(index) 
     index = 0 
    list.append(index) 
    return max(list) 

這固定版本適用於我在普通的Python解釋器中。我沒有嘗試過jython。

2

你不附加任何東西到你的列表中,當你退出循環和NUMS只有正整數,你需要做這樣的事情:

def longestSequencePos(nums): 
    index = 0 
    list = [] 
    integ = 0 

    for obj in nums: 
     if obj > 0: 
      index = index +1 
     else: 
      list.append(index) 
      index = 0 

    list.append(index) 

    return max(list) 

如果將追加指標的最新統計列表在循環結束時爲空。

也,你叫你的list,好了,list,這實際上是一個list構造,雖然這不是它是值得留意的do not do

+0

即使索引不爲空,索引也應該添加到循環結尾的列表中,否則它將錯過任何最長序列在結尾的情況。 – Colin

+0

非常真實,謝謝你的發現。 – Serdalis

1

你不需要的問題一個列表來做到這一點:

count = maxc = 0 
for obj in nums: 
    if obj > 0: 
     count += 1 
    else: 
     maxc = max(count, maxc) 
     count = 0 
maxc = max(count, maxc)