在python中不使用numpy对数据进行排序

在python中不使用numpy对数据进行排序,python,arrays,list,Python,Arrays,List,在python中(没有numpy)有没有办法对列表进行排序? 例如: array1 = [1934,1232,345453,123423423,23423423,23423421] array = [4,2,7,1,1,2] ranks = [2,1,3,0,0,1] 我只举numpy的例子 我主要希望对数据进行排名,然后根据排名对数据进行处理,以查看阵列1中哪些数据元素贡献了阵列中90%的最高数据 如果你想让我举个例子,请告诉我。IIUC你可以很容易地建立一个等级字典,然后循环使用数组的元素

在python中(没有numpy)有没有办法对列表进行排序? 例如:

array1 = [1934,1232,345453,123423423,23423423,23423421]
array = [4,2,7,1,1,2]
ranks = [2,1,3,0,0,1]
我只举numpy的例子

我主要希望对数据进行排名,然后根据排名对数据进行处理,以查看阵列1中哪些数据元素贡献了阵列中90%的最高数据


如果你想让我举个例子,请告诉我。

IIUC你可以很容易地建立一个等级字典,然后循环使用
数组的元素来查找等级:

>>> array = [4,2,7,1,1,2]
>>> rankdict = {v: k for k,v in enumerate(sorted(set(array)))}
>>> rankdict
{1: 0, 2: 1, 4: 2, 7: 3}
>>> ranked = [rankdict[a] for a in array]
>>> ranked
[2, 1, 3, 0, 0, 1]

如果要按此排名对
array1
排序,有几种方法。一个常见的方法是构建一个压缩列表,然后对其进行排序:

>>> zip(ranked, array)
[(2, 4), (1, 2), (3, 7), (0, 1), (0, 1), (1, 2)]
>>> sorted(zip(ranked, array))
[(0, 1), (0, 1), (1, 2), (1, 2), (2, 4), (3, 7)]
>>> sorted(zip(ranked, array1))
[(0, 23423423), (0, 123423423), (1, 1232), (1, 23423421), (2, 1934), (3, 345453)]

请举例说明如何将
array1
array
转换为
ranks
如果要匹配,numpy可能是您最好的选择。显然,你可以在纯python中重新实现你想要的任何算法,但我想不出任何非说教的理由来这么做。我不知道如何在没有numpy的情况下将它们转换为列组。@pistal你通常如何将它们转换为列组?有什么公式吗?我们如何对排名列表进行排序,然后对其对应的数组1进行排序?如何获得数组中前90%的数据?我是否应该在列表中求和并搜索90%,然后将其余的(基于排名)踢出去?@pistal:有几种方法可以定义“前90%”;选择一个并尝试一些东西。你会建议浏览列表并搜索前90%吗?这件事现在让我很震惊。