如何获取列表中从大到小的索引? [重复]

问题描述 投票:0回答:4

我正在用 Python 编写一个小项目:

我想获取以下列表中从最高到最小数字的索引(在列表中):

list = [20, 30, 24, 26, 22, 10]

结果应该是:

index_list = [1, 3, 2, 4, 0, 5]

有人知道我该怎么做吗? 提前致谢。

python list indexing max min
4个回答
1
投票

我对 python 编程还很陌生,但这似乎可行:

list = [20, 30, 24, 26, 22, 10]
list_sorted = list.copy()
list_sorted.sort()

list_index = []
for x in list_sorted:
    list_index.insert(0,list.index(x))

print(list_index)

输出:

[1, 3, 2, 4, 0, 5]

因为上面会产生不正确的值,所以有重复,请看下一个:

list = [20, 10, 24, 26, 22, 10]
list_tmp = list.copy()
list_sorted = list.copy()
list_sorted.sort()

list_index = []
for x in list_sorted:
    list_index.insert(0,list_tmp.index(x))
    list_tmp[list_tmp.index(x)] = -1

print(list)
print(list_index)

输出:

[20, 10, 24, 26, 22, 10]
[3, 2, 4, 0, 5, 1]

输出是

[3, 2, 4, 0, 5, 1]
还是
[3, 2, 4, 0, 1, 5]
应该无关紧要,因为这些索引指的是相同的值。


0
投票

接受的答案不是用 Python 写的,另一个答案只有几行,而且速度不如更大的数据集快,所以我想我应该全力以赴:

import numpy as np

list = [20, 30, 24, 26, 22, 10]
index_list = np.array(list).argsort().tolist()[::-1]

输出确实是:

index_list = [1, 3, 2, 4, 0, 5]

它处理重复值的索引,而且速度非常快。它需要一个导入,但如果你正在处理大数据集,它可能会有你需要的其他功能,并且总体上会节省时间。


-1
投票

按索引升序构建

index_list
,然后调用
sort()
Comparator
,按给定索引处
list
中的值降序排列。

List<Integer> list = Arrays.asList(20, 30, 24, 26, 22, 10);

List<Integer> index = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++)
    index.add(i);
index.sort(Comparator.comparing(list::get).reversed());

System.out.println(index);

输出

[1, 3, 2, 4, 0, 5]

或者您可以使用流在一个语句中完成,结果相同:

List<Integer> index = IntStream.range(0, list.size()).boxed()
                               .sorted(Comparator.comparing(list::get).reversed())
                               .collect(Collectors.toList());

-1
投票
def num(list1):
 mul = 100000
 for x in list1:
  if x < mul:
    mul = x
 return mul
num([3, 4, 2, 77, 45, 44])
© www.soinside.com 2019 - 2024. All rights reserved.