使用 heapq.nlargest 和百分比 - Python

Using heapq.nlargest with a Percentage - Python

有谁知道如何将 heapq.nlargest 用于百分比而不是数字?目前我有

heapq.nlargest(187030, y)

但这让我获得了前 187030 个数字。我需要它来为每个数组获取前 10% 的数字,因为并非所有数组都有 180 万个。

干杯

是的。在幕后,堆实际上是一个具有某些属性的列表(它使用所谓的 implicit data structure)。

所以我们可以先取len(y)获取元素个数。除以 10,我们得到 10% number 个元素。所以我们可以使用:

heapq.nlargest(<b>len(y)//10</b>, y)

或者如果您想使用百分比作为参数:

<b>p = 17</b>  # top 17 procent

heapq.nlargest(<b>len(y)*p//100</b>, y)

您还可以使用 分数 (例如顶部 0.14):

<b>from math import round</b>

<b>p = 0.14</b>  # top 14 procent

heapq.nlargest(<b>round(len(y)*p)</b>, y)