【发布时间】: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