首页 > 解决方案 > 从python中的巨大列表中获取前N个元素的最佳和最快方法

问题描述

我正在尝试寻找最佳解决方案,以从数十亿的庞大列表中获取数量最多的前 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 的全部容量。是否有任何内置函数或任何其他方法可以完成多进程的工作?还是能够充分利用计算能力,从而更快?

标签: pythonpython-3.xlistsortingmultiprocessing

解决方案


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

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

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

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


推荐阅读