【问题标题】:How does the max() function work in Jython?max() 函数在 Jython 中如何工作?
【发布时间】:2011-10-31 03:51:42
【问题描述】:

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

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)

list 应该包含所有正数序列的长度,但 max 函数不起作用。

【问题讨论】:

  • 在什么情况下不工作?
  • 永远不要使用list作为变量名。
  • 调试:print list,或者更确切地说是print better_name_than_list
  • 请修正您的标题以反映您的实际问题。标题具有误导性。也许“我如何使用 max() 来查找列表中最长的正数序列。”或反映真正问题的东西。

标签: python list jython


【解决方案1】:

当您退出循环并且 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 需要注意

【讨论】:

  • 索引即使不为空也应该在循环结束时添加到列表中,否则它将错过任何最长序列位于末尾的情况。
【解决方案2】:

您不需要列表来执行此操作:

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

【讨论】:

    【解决方案3】:

    问题可能是当 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 上尝试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2016-03-07
      • 1970-01-01
      • 2014-10-15
      相关资源
      最近更新 更多