尝试查找列表中最大数量的索引时python代码中的ValueError

时间:2016-04-09 18:29:18

标签: python list max

给定一个长度为n的列表,我需要在时间复杂度为O(log(n))的情况下找到列表中最大数字的索引,而不使用python的内置max方法。以下是我的尝试,但是我收到了错误

ValueError: 0 is not in list

就行了

return n.index(find_max_number(n))

当我运行我的代码时。对我的代码和替代解决方案的反馈将不胜感激。

  def find_maximum(n):
         b = find_max_number(n)
         return n.index(b)

    def find_max_number(n):
            middle = len(n)//2
            if len(n) == 1 :
                return (n[0])
            if len(n)>2:
               if n[middle] > n[middle-1] and n[middle] > n[middle+1] :
                return (n[middle])
            if (n[middle-1] < n[middle]):
              return find_maximum(n[middle:])
            else :
              return find_maximum(n[:middle])

2 个答案:

答案 0 :(得分:1)

只需使用Python的max来查找列表中的最大数字,然后使用.index()就像获取索引一样。

<强>代码

n = [2, 3, 4, 5]

def greatest_num_index(n):
    return n.index(max(n))

print(greatest_num_index(n))

<强>退出

3

如果您不允许使用max:

greatest_num初始化为n[0]至max&lt; 0.

def max_num(n):
    greatest_num = n[0]
    for item in n:
        if item > greatest_num:
            greatest_num = item
    return greatest_num

这通过遍历list中的每个元素来进行,测试它是否大于当前最大数字,如果是,则将最大数字设置为当前数字。

答案 1 :(得分:1)

您可以简化您的功能find_max_number

def find_max_number(numbers):
    max_ = float('-inf')
    for number in numbers:
        if number > max_:
            max_ = number
    return max_

或者,你可以直接找到索引:

def find_maximum(numbers):
    max_ = float('-inf')
    max_index = None
    for index, number in enumerate(numbers):
        if number > max_:
            max_ = number
            max_index = index
    return max_index