我正在攻读离散数学课程。在本课程中,我们的书讨论了不同的排序算法。为了更好地理解这一点,我尝试将其中一个算法转换为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
答案 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