【问题标题】:Finding k largest elements找到 k 个最大的元素
【发布时间】:2021-06-04 08:58:44
【问题描述】:

为什么以下方法不适用于大型输入?

def finder(arr,n,k):
    l2 = []
    arr.sort()
    for x in range(n-1,k,-1):
        l2.append(arr[x])
    return l2

PS:我写的时候就可以了

arr.sort(reverse = True)

【问题讨论】:

  • 您能否给出失败的输入并描述预期和实际行为?
  • 这不适用于任何输入。
  • @Manuel 它正在为此输入工作 -> N = 5, K = 2 Arr[] = {12, 5, 787, 1, 23}
  • @BrianMcCutchon 42 是数组的大小,30 是 k 的值。然后接下来的数字是数组的元素。

标签: python arrays list sorting


【解决方案1】:

您的示例代码有一个错误:n 而不是range(n-1,k,-1) 中的N。此外,您将返回 N-k 个最大值,而不是 k 个最大值。 Python 知道其列表的长度,因此提供 N 参数只会允许错误(即 N 不等于列表大小)。此外,修改您提供的参数通常是一种不好的做法,因此您不应在arr 上使用.sort()。使用 .sort() 还会限制您可以传递给函数的参数类型(例如,它不适用于迭代器)

整个函数可以简化为:

def finder(arr,k): return sorted(arr)[-k:]

但这需要对整个数组进行排序。使用 heapq 可以更高效地得到结果:

from heapq import nlargest

def finder(arr,k): return nlargest(k,arr)

【讨论】:

  • 对。 N 和 n 的意思是一样的,这是一个错字。
猜你喜欢
  • 2013-01-05
  • 2012-10-22
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2018-09-13
  • 2014-07-21
相关资源
最近更新 更多