查找最大值会返回意外输出

时间:2017-09-06 16:53:07

标签: python sorting

我正在攻读离散数学课程。在本课程中,我们的书讨论了不同的排序算法。为了更好地理解这一点,我尝试将其中一个算法转换为python,但算法会返回一些意外的输出,而我却没有意识到我的错误在哪里。如果你愿意,请看下面。非常感谢任何帮助。

### Find max ###
# A = Array of values to find max from.
# n = Length of array A. Can also be described as the number of loops the array will perform

A = [100, 3, 7, 15, 17, 19, 25, 31, 32, 8, 21, 5, 51, 64, 63]
n = len(A) #len: python command to retrieve length of an array.

def find_max(A, n):

    max = 0

    for i in range(0, n):
        if A[i] > max:
            max = i
    return max

### Input A and N in the algorithm and print the output ###
print find_max(A, n)

此处预期输出应为0,因为数组中的第一个条目具有最高值。但是,脚本返回14,这是数组中的最高键。

我希望python脚本尽可能地类似于伪代码。简而言之,我们新学生更容易将它们与彼此进行比较。这是我们书中的伪代码:

find_max(A, n)
    max = 0
    for i = 0 to n-1
        if (A[i] > A[max]) max = i
    return max

3 个答案:

答案 0 :(得分:2)

为什么它不起作用:你的尝试是混合指数&值。

看起来像伪代码(用,在数组为空的情况下添加了一个检查,因此它不会返回0):

<a href="http://example.com/some_path">my link</a>

作为结论,有效和pythonic的最佳方法可能是使用def find_max(A, n) if not A: raise Exception("empty array") max = 0 for i in range(1,n): # no need to start at 0, already covered if A[i] > A[max]: max = i return max 来携带索引&amp;值和带有lambda的内置enumerate告诉max查找值:

max

答案 1 :(得分:1)

这将完成工作:

def find_max(A, n):

    max = 0

    for i in range(0, n):
        if A[i] > max:
            max = A[i]
return max

或者您可以使用内置最大功能:

result = max(A)

答案 2 :(得分:1)

首先,你不应该使用max作为变量,因为它是一个Python关键字,第二,你的变量max(让我们称之为mx),是保持索引的最大值,而不是值本身,所以这是解决问题的方法:

A = [17, 19, 25, 31, 32, 3, 7, 15, 8, 21, 100, 5, 51, 64, 63]
n = len(A)

def find_max(A, n):

    mx = 0 # we call it mx

    for i in range(1, n): # since mx = 0, no need start at 0
        if A[i] > A[mx]: # we compare the number in A[i] with the number in A[mx] not with mx
            mx = i
    return mx # index

print(find_max(A, n)) # => 10