Как найти положение элементов в массиве по Python? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть следующий массив:

scores=[2.619,3.3, 9.67, 0.1, 6.7,3.2]

И я хочу получить элементы, которые больше 5, с помощью следующего кода:

min_score_thresh=5
Result=scores[scores>min_score_thresh]

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

[9.67, 6.7]

Теперь я хочу получить позиции этих двух элементов, и мой ожидаемый ответ будет сохранен в переменной x:

x = [2,4]

Пожалуйста, поделитесь со мной идеями, спасибо

Ответы [ 6 ]

0 голосов
/ 10 мая 2018

простых вкладчиков

scores = [2.619, 3.3, 9.67, 0.1, 6.7, 3.2]
min_score_thresh = 5

result = [scr for scr in scores if scr > min_score_thresh]
index_ = [scores.index(x) for x in result]
0 голосов
/ 10 мая 2018

Использование numpy:

x = np.flatnonzero(np.greater(scores, min_score_thresh)).tolist()

ПРИМЕЧАНИЕ: .tolist() не требуется, если вы можете жить с numpy.ndarray s.

0 голосов
/ 10 мая 2018

Получение индексов (или значений) с помощью понимания списка легко:

In [33]: [i for i,v in enumerate(scores) if v>5]
Out[33]: [2, 4]

Мы можем получить оба, как список кортежей с:

In [34]: [(i,v) for i,v in enumerate(scores) if v>5]
Out[34]: [(2, 9.67), (4, 6.7)]

Тогда мы можем использовать идиому zip*, чтобы «транспонировать» этот список:

In [35]: list(zip(*_))
Out[35]: [(2, 4), (9.67, 6.7)]

Или упаковав все в одно выражение с распаковкой:

In [36]: v,x = tuple(zip(*((i,v) for i,v in enumerate(scores) if v>5)))
In [37]: v
Out[37]: (2, 4)
In [38]: x
Out[38]: (9.67, 6.7)

На первый взгляд, получить несколько списков из понимания списка сложно, но это zip * транспонирование позаботится об этом.

0 голосов
/ 10 мая 2018

Используйте numpy.where для векторизованного решения:

import numpy as np

scores = np.array([2.619,3.3, 9.67, 0.1, 6.7,3.2])
min_score_thresh = 5

res = np.where(scores>min_score_thresh)[0]

print(res)

[2 4]
0 голосов
/ 10 мая 2018
scores = [2.619, 3.3, 9.67, 0.1, 6.7, 3.2]

min_score_thresh = 5

# score is 5 or higher
result = []

# position in 'scores' list
indx = []

for i, item in enumerate(scores):
    if item > min_score_thresh:
        result.append(item)
        indx.append(i)

x = indx

print(result)
print(x)
0 голосов
/ 10 мая 2018
def find_scores(a_list, min):
    filters = list(filter( lambda x: x[1]> min, [(i[0],i[1]) for i in enumerate(a_list) ]))
    return [i[0] for i in filters]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...