在没有numpy的情况下在python中排序数据

时间:2014-02-10 03:21:13

标签: 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]

Gives我的例子只有numpy。

我主要想对数据进行排名,然后根据排名处理数据,以查看array1中哪些数据元素占阵列中最高数据的90%。

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

1 个答案:

答案 0 :(得分:1)

IIUC你可以轻松地建立一个排名字典,然后循环遍历array的元素以找到排名:

>>> 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)]