Как получить индексы от самого большого до наименьшего числа в списке? - PullRequest
0 голосов
/ 11 января 2020

Я кодирую небольшой проект в Python:

Я хочу получить индексы (в списке) от наибольшего до наименьшего числа в следующем списке:

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

Результат должен быть:

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

Кто-нибудь имеет представление о том, как я мог это сделать? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 января 2020

Создайте 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);

Output

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

Или вы можете сделать это в одном выражении, используя потоки, тот же результат:

List<Integer> index = IntStream.range(0, list.size()).boxed()
                               .sorted(Comparator.comparing(list::get).reversed())
                               .collect(Collectors.toList());
0 голосов
/ 11 января 2020

Я довольно новичок в программировании на 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)

output:

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

output:

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

Не имеет значения, равен ли [3, 2, 4, 0, 5, 1] или [3, 2, 4, 0, 1, 5], потому что эти индексы ссылаются на одинаковые значения.

...