【发布时间】:2018-06-01 08:40:32
【问题描述】:
在python3中,如果我有一个列表[a,b,c,d,e],它的排名顺序[1,4,2,2,0]与元素c和d共享相同的顺序。如何获取新列表[e,a,c,d,b]?
【问题讨论】:
-
注意,
sorted(zip(ranklist, mylist))给你类似[(0, 'e'), (1, 'a'), (2, 'c'), (2, 'd'), (4, 'b')] -
或者,你可以先
map = dict(zip(mylist, ranklist))然后sorted(mylist, key=map.get) -
链接到已接受答案的链接涉及一种排序算法,我认为它是一个 n log(n) 操作。可以在 O(n) 时间内进行就地重新排序。链接到reorder according to rank 的示例(请注意此示例的标题未提及排名,但它是按排名重新排序。)
-
我想知道根据排名重新排序有多常见。如果生成一个索引 0 到 n-1 的数组,然后根据数组对索引进行排序,你会得到类似 [4,0,2,3,1] 的内容(顺序为 list[4], list[0], list[2], list[3], list[1]) 而不是排名 [1,4,2,3,0]。您可以从根据数组排序的索引生成排名:rank[index[i]] = i,反之亦然:index[rank[i]] = i.
标签: python python-3.x sorting ranking rank