Как получить индексы отсортированного массива, кроме некоторых значений в Python? - PullRequest
1 голос
/ 17 марта 2019

У меня есть числовой список:

a=[6,8,1,0,5,0]

и мне нужно получить список индексов из исходного списка в порядке сортировки по возрастанию, за исключением 0 элементов, подобных этому:

index=[3,4,1,0,2,0]

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

при использовании numpy's argsort придает определенную элегантность этой проблеме

import numpy as np
a=[6,8,1,0,5,0]
#create a numpy array
temp = np.array(a) 
#assign non zero values in array with correct argsort indices.
temp[temp != 0] = np.argsort(temp[temp != 0]) + 1 
print(temp)
[3 4 1 0 2 0]
0 голосов
/ 17 марта 2019
a = [6, 8, 1, 0, 5, 0]

sorted_positions = {x: i for i, x in enumerate(sorted(a))}
# {0: 1, 1: 2, 5: 3, 6: 4, 8: 5}

indices = [sorted_positions[x] for x in a]
# [4, 5, 2, 1, 3, 1]

zeroes = a.count(0)
# 2

answer = [
    0 if x == 0
    else i - zeroes + 1
    for i, x in zip(indices, a)
]
# [3, 4, 1, 0, 2, 0]

Термины для поиска, если вы не распознаете синтаксис: понимание списка, понимание слова и троичный оператор Python.

Для случая a=[3,3,1,1,2,2] это дает [6, 6, 2, 2, 4, 4].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...