将多个列表排序在一起的最快方法,每个列表包含十亿个条目

时间:2015-11-12 20:12:38

标签: python python-2.7 sorting

我有4个列表,每个列表有10亿个条目,我正在尝试根据list1中的排序顺序对所有4个列表进行排序。

我已经尝试了

list1, list2, list3, list4 = zip(*sorted(zip(list1, list2, list3, list4)))

sorted_index = np.argsort(list1)
list1 = [list1[i] for i in sorted_index]
list2 = [list2[i] for i in sorted_index]
list3 = [list3[i] for i in sorted_index]
list4 = [list4[i] for i in sorted_index]

并且第二种方法比第一种方法快,但它仍然非常耗时。有没有更有效的方法来进行这种排序?简单地将它们压缩并排序不是一种选择,因为我需要在最后解压缩列表。

这可以通过映射并添加自定义get函数来完成,如评论中建议的C.B.吗?

2 个答案:

答案 0 :(得分:0)

sorted_index = np.argsort(list1)
print list2[sorted_index]
print list3[sorted_index]
...

仍然可能有点慢......但可能更好

这假设您的列表实际上是numpy数组......

答案 1 :(得分:0)

这取决于列表中的条目。一般排序可能会使用qsort。这意味着O(n log n)排序时间。对于像字典一样的东西,这将是非常低效的。如果排序元素的平均长度(比方说K)明显小于log n,那么通过填充trie并将其读出来,您将获得更快的结果。与合并排序相比,它的占用空间也小得多。填充trie的运行时间是O(n K)。当n为40亿时,log n非常大。