Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 寻找k个最大元素_Python_Arrays_List_Sorting - Fatal编程技术网

Python 寻找k个最大元素

Python 寻找k个最大元素,python,arrays,list,sorting,Python,Arrays,List,Sorting,为什么以下方法不适用于大型输入 def finder(arr,n,k): l2 = [] arr.sort() for x in range(n-1,k,-1): l2.append(arr[x]) return l2 附言:当我写作的时候它就起作用了 arr.sort(reverse=True)您的示例代码有一个错误:n而不是n范围(n-1,k,-1)。另外,返回的是N-k最大值,而不是k最大值。Python知道其列表的长度,因此提供N参数只允

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

def finder(arr,n,k):
    l2 = []
    arr.sort()
    for x in range(n-1,k,-1):
        l2.append(arr[x])
    return l2
附言:当我写作的时候它就起作用了


arr.sort(reverse=True)

您的示例代码有一个错误:
n
而不是
n
范围(n-1,k,-1)。另外,返回的是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
范围(n-1,k,-1)。另外,返回的是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)

你能给出一个失败的输入并描述预期和实际的行为吗?这对任何输入都不起作用。@Manuel它对这个输入有效->N=5,K=2 Arr[]={12,5,787,1,23}你自己看看@BrianMcCutchon 42是数组的大小,30是K的值。接下来的数字是数组的元素。你能给出一个失败的输入并描述预期和实际的行为吗?这对任何输入都不起作用。@Manuel它对这个输入有效->N=5,K=2 Arr[]={12,5,787,1,23}你自己看看@BrianMcCutchon 42是数组的大小,30是K的值。接下来的数字是array.Right的元素。N和N的意思是一样的,这是一个打字错误。N和N的意思是一样的,这是一个打字错误。