【发布时间】:2021-06-15 03:23:30
【问题描述】:
我正在尝试找到对列表进行排序的最快方法。 例如,假设我试图对以下列表进行排序
lst = [1, 0, -1, 0.1, 0, 5, 10, 4]
我最后想要的是获得排序列表,但也能够在排序之前知道他们在lst 中的索引是什么。
我目前使用的方法是这样的
lst = [1, 0, -1, 0.1, 0, 5, 10, 4]
lst = list(enumerate(lst))
lst.sort(key = lambda x: x[1], reverse = True)
这样做会给lst = [(6, 10), (5, 5), (7, 4), (0, 1), (3, 0.1), (1, 0), (4, 0), (2, -1)]
现在我不一定需要有元组 (idx, value),它可以是两个单独的列表。重要的部分是对值进行排序,并且还知道列表lst 中的“原始”索引是什么。例如得到:
lst_val = [10, 5, 4, 1, 0.1, 0, 0, -1]
lst_idx = [6, 5, 7, 0, 3, 1, 4, 2]
现在我想知道是否有更快/更有效的方法来排序,因为我可以有一个包含超过 200,000 个值的列表。
允许使用numpy,但除此之外我认为不允许使用其他模块。
【问题讨论】:
-
这能回答你的问题吗? Transpose/Unzip Function (inverse of zip)?
-
@quamrana 不是真的,我正在尝试对列表进行排序,并跟踪索引,而不是尝试从列表中分离索引...
-
答案指出
zip是它自己的逆。您创建了一个list,就好像您将值和它们的索引压缩在一起一样。现在您需要将它们解压缩到两个列表中。
标签: python arrays performance numpy sorting