python - 从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 的全部容量。是否有任何内置函数或任何其他方法可以完成多进程的工作?还是能够充分利用计算能力,从而更快?
解决方案
如果您希望使用并行化工作,您可以使用 Python 库,例如 Ray。
使用 Ray,您可以通过将数据划分为多个集合并让每个线程尝试查找每个子集的最大 N 个数来并行化搜索。之后,您应该有 k 个包含 N 个“大”数字的列表。从那里,您可以找到最大的 N 个数字。
如果您想了解有关 Ray 文档的更多信息,可以查看文档。
推荐阅读
- angular - 从角度请求 LinkedIn OAuth API 时出错
- python - PyQt5:使用不透明的小部件创建透明窗口
- python - 计算熊猫数据框中每一列中特定值的出现次数
- python - 使用python传输文件以执行脚本NiFi
- c++ - C++派生类在初始化之前调用基类上的方法
- javascript - 问题用 gui.remember() 记住嵌套对象
- javascript - Proactive MutationObserver - 在添加到 DOM 之前拦截节点
- javascript - 错误返回数据foreach查找mongodb数组
- java - 找不到命令:jdeprscan
- python - 如何从两个列表中选择对/?