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的意思是一样的,这是一个打字错误。