定义一个函数,该函数接受一个数字数组,并在数字停止增加并开始减少时返回索引(python)



正如标题所示,我试图定义一个函数,该函数接受数字数组并返回数字停止增加并开始减少或停止减少并开始增加的索引。例如,如果数组是[1,2,4,6,4,3,1],函数应该返回3。下面的代码只返回左括号,我想知道为什么会这样。

def ArrayChallenge(arr):
for i in range(len(arr)):
if arr[i] > arr[i+1]:
return i

如有任何帮助,不胜感激。

我认为是我的visual studio代码版本导致了这个问题。左括号只有在我在VS code上本地运行时才打印出来。在repl和使用colab时,

无论如何,我想张贴我想出的解决方案…我花的时间比我愿意承认的要长一些,但我想对于编程新手来说,这是意料之中的。这是我解决这个问题的代码。我欢迎所有的批评。

for i in range(len(arr)):
if (arr[0] == min(arr) and arr[-1] == max(arr)) or (arr[0] == max(arr) and arr[-1] == min(arr)):
return -1
if arr[i+1] > arr[i]:
return arr.index(max(arr))
else:
return arr.index(min(arr))

假设您的数组总是增加和减少,没有重复的最大值,您实际上是在寻找列表中的最大值。一个更简单的选择是简单地找到最大值并返回其索引。如果不是这样,这可能会引导您找到解决方案:

def ArrayChallenge(arr):
return arr.index(max(arr))

编辑:考虑到海报的评论,下面的应该可以工作(但不是最好看的)。这里的假设是,第一个不能使用,因为它前面没有更低的值,最后一个不能使用,因为它后面没有更低的值:

def ArrayChallenge(arr):
peaks = []
for i in range(1, len(arr) - 1):
if arr[i - 1] < arr[i] > arr[i + 1]:
peaks.append(i)
return peaks if len(peaks) > 0 else -1