【问题标题】:Defining a function that takes an array of numbers and returns the index when the numbers stop increasing and begin decreasing (python)定义一个函数,该函数接受一个数字数组并在数字停止增加并开始减少时返回索引(python)
【发布时间】:2022-06-15 03:40:17
【问题描述】:

正如标题所示,我正在尝试定义一个函数,该函数接受一个数字数组并返回数字停止增加并开始减少或停止减少并开始增加的索引。例如,如果数组是 [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

任何帮助将不胜感激。

【问题讨论】:

  • 1) 是字面上返回左括号字符'['吗? 2)你本质上只是想找到最高值的索引吗?
  • 正确,它实际上是返回左括号字符“[”。不完全是,第一部分是找到数字停止增加并开始减少的地方,所以我相信最大值会起作用。但是,如果输入的序列是 [10, 9, 8, 7, 9, 2, 1],那么函数应该返回 4,因为它在列表的索引 4 处停止递减。另外,如果序列中没有拐点,那么我想返回-1;即 [-5, -2, 0, 1, 7, 8] 应该只返回 -1。
  • "以下代码只返回左括号" 这是因为提供给函数 不是列表(我们在 Python 中不称它们为“数组” ),而是一个 字符串.
  • @KarlKnechtel 我尝试将 op 的代码作为字符串返回,它返回 0,而不是字符
  • 对,0 是那个字符的索引。因此,无论如何,所描述的行为要么不可重现,要么至少不是所示代码的错误。当我尝试输入[1, 2, 4, 6, 4, 3, 1](列表)的代码时,结果是3(根据需要)。投票结束。

标签: python


【解决方案1】:

我认为是我的 Visual Studio 代码版本导致了问题。左括号仅在我在 VS 代码上本地运行时才打印出来。在 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))

【讨论】:

    【解决方案2】:

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

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

    编辑:给定海报的 cmets,以下应该可以工作(但不是最好看的)。这里的一个假设是,第一个不能使用,因为它没有较低的先前值,而最后一个不能使用,因为它没有较低的后续值:

    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
    

    【讨论】:

    • 请只回答存在可重现问题的问题。 “更简单的任务方法”不是这里的主题(除了作为解决实际问题的一部分);这是Code Review的权限。
    猜你喜欢
    • 2022-12-17
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多