Jython中的max()函数如何工作?

0 投票
3 回答
1115 浏览
提问于 2025-04-17 05:19

我需要这个函数来告诉我一个列表中最长的正数序列。

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 个回答

0

问题可能出在你没有在数字用完时把索引加到列表里,所以如果列表的最后一部分是最长的序列,它就不会返回正确的值:

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上试过。

1

你不需要一个列表来完成这个:

count = maxc = 0
for obj in nums:
    if obj > 0:
        count += 1
    else:
        maxc = max(count, maxc)
        count = 0
maxc = max(count, maxc)
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 是一个用来创建列表的构造函数。虽然这不是问题,但这是一个需要注意的地方,最好不要这样做。

撰写回答