2011-10-31 41 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)