【问题标题】:Best and quickest way to get top N elements from a huge list in python从python中的巨大列表中获取前N个元素的最佳和最快方法
【发布时间】:2026-02-17 10:50:02
【问题描述】:

我正在尝试从数十亿的庞大列表中找出数量最多的前 N ​​个元素的最佳解决方案。 到目前为止,我的想法是:

get the first N elements, sort them in descending order (list A). 
for N+1 to last element:
    min = the Nth element. 
    if the N+1 element > min then insert it into list A and sort it. 
        remove the last element

实际上,它似乎不会消耗太多内存,并且比仅使用整个巨大列表的 list.sort 更快地获得前 N 个元素

但是,这种排序不会使用多核 CPU 的全部容量。是否有任何内置函数或任何其他方法可以完成多进程的工作?还是能够充分利用计算能力从而更快?

【问题讨论】:

  • Python 本身是单线程的。您必须使用多处理库才能充分使用多个内核。如果您提供代码示例,可能会有更有效的方法来处理您的问题。
  • ThreadPoolExecutor 可能是一种可能的解决方案。虽然如果可能的话,我会先用 PyPy 运行它以查看执行时间的差异。
  • 您也可以查看np.partition。类似的想法here。但是list.sort真的不够快吗?
  • 如果 N 相对于列表的长度较小,感觉堆化可能是更好的解决方案。
  • 我没用过NumPy包但是在pypy3 win 32下运行。

标签: python python-3.x list sorting multiprocessing


【解决方案1】:

如果您希望使用并行化工作,您可以使用 Python 库,例如 Ray。

使用 Ray,您可以通过将数据划分为多个集合并让每个线程尝试查找每个子集的最大 N 个数来并行化搜索。之后,您应该有 k 个包含 N 个“大”数字的列表。从那里,您可以找到最大的 N 个数字。

如果您想了解有关 Ray 文档的更多信息,可以查看文档。

文档:https://docs.ray.io/en/latest/

【讨论】:

    最近更新 更多