如何在保留值顺序的同时对数字列表进行排序

时间:2017-10-24 03:10:45

标签: python

假设我有一个列表[102, 97, 116, 101],我希望在保留列表中值的位置时按数字对其值进行排名,如[3, 1, 4, 2]中所示。我该怎么做呢?

3 个答案:

答案 0 :(得分:3)

将查找键入的索引输入排序到现有的CollectionView

list

使用>>> mylist = [102, 97, 116, 101] >>> ranks = sorted(range(1, len(mylist)+1), key=lambda i: mylist[i-1], reverse=True) >>> print(ranks) [3, 1, 4, 2] 作为索引是因为你使用了1-up rank(而Python使用0-up索引)。

答案 1 :(得分:0)

以下是唯一数字列表的可能方式:

  1. 创建列表的副本并对其进行排序(反向)。称之为sorted_list
  2. 创建第三个空列表result
  3. 浏览输入列表,找到sorted_list列表中每个数字的索引。
  4. 将该索引附加到result列表。
  5. 给出您的示例数据:

    input_list = [102, 97, 116, 101]
    sorted_list = [97, 101, 102, 116]
    result = [1, 3, 0, 2]
    

    如果您希望结果从1而不是1开始,请将<{1}}添加到索引。

    实现:

    0

答案 2 :(得分:0)

我们可以对未排序列表中的项目索引进行排序和获取:

sorted_list = sorted([102, 97, 116, 101])
[sorted_list.index(e) for i, e in enumerate([102, 97, 116, 101])]

<强>输出

[2, 0, 3, 1]

如果您想从1开始编制索引,只需添加一个:

[sorted_list.index(e)+1 for i, e in enumerate([102, 97, 116, 101])]

<强>输出

[3, 1, 4, 2]