函数为某些数组返回错误值

我最近开始编码并且正在研究一个函数,该函数返回给定数组中的 3 个最大数字。该函数适用于大多数数组,但不适用于其他数组。下面是代码:


def findThreeLargestNumbers(array):

  list = []

  if len(set(array)) != 1:

    while len(list) <= 2:

      for element in array:

        if element == max(array):

          list.append(element)

          array.remove(element)

    list.reverse()

    return list

  else:

    for element in array:

      newlist = [element, element, element]

      return newlist

例如,当我输入数组 [1,2,3,4,5] 时,函数返回 [3,4,5]。但是,当我输入 [55, 43, 11, 3, -3, 10] 时,该函数返回 4 个值:[10, 11, 43, 55]。


为什么是这样?


太感谢了!


慕慕森
浏览 63回答 2
2回答

肥皂起泡泡

在 for 的末尾添加一个 break&nbsp; def findThreeLargestNumbers(array):&nbsp; &nbsp; &nbsp; list = []&nbsp; &nbsp; &nbsp; if len(set(array)) != 1:&nbsp; &nbsp; &nbsp; &nbsp; while len(list) <= 2:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for element in array:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if element == max(array):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list.append(element)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array.remove(element)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break&nbsp; &nbsp; &nbsp; &nbsp; list.reverse()&nbsp; &nbsp; &nbsp; &nbsp; return list&nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; for element in array:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newlist = [element, element, element]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return newlist

慕姐8265434

这个嵌套循环可以添加任意数量的元素list(顺便说一句,这对于列表来说是一个坏名字,因为它会覆盖内置函数list()):&nbsp; &nbsp; while len(list) <= 2:&nbsp; &nbsp; &nbsp; for element in array:&nbsp; &nbsp; &nbsp; &nbsp; if element == max(array):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; list.append(element)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array.remove(element)您只检查外层循环的长度list,但内层循环遍历整个数组,并可能list在再次检查条件之前将所有这些添加到(如果数组是反向排序的)。编写此函数的一种更简单的方法是简单地对其进行排序并取最高的三个元素:from typing import Listdef find_three_largest_numbers(array: List[int]) -> List[int]:&nbsp; &nbsp; """Return the three largest numbers from the array."""&nbsp; &nbsp; return sorted(array)[-3:](编辑)不涉及排序的稍微复杂的版本:def find_three_largest_numbers(array: List[int]) -> List[int]:&nbsp; &nbsp; """Return the three largest numbers from the array."""&nbsp; &nbsp; largest_3: List[int] = []&nbsp; &nbsp; for num in array:&nbsp; &nbsp; &nbsp; &nbsp; largest_3.append(num)&nbsp; &nbsp; &nbsp; &nbsp; if len(largest_3) > 3:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; largest_3.remove(min(largest_3))&nbsp; &nbsp; return largest_3在此实现中,largest_3永远不允许增长超过 3 个元素,因为每次增长到 4 个时,我们都会在添加更多元素之前删除一个元素。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python