如何通过Python找到数组中元素的位置?

时间:2018-05-10 01:24:54

标签: python arrays python-3.x numpy

我有以下数组:

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]

请分享我的想法,谢谢

7 个答案:

答案 0 :(得分:4)

使用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]

答案 1 :(得分:2)

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)

答案 2 :(得分:2)

通过列表理解获取索引(或值)非常简单:

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 *转换会解决这个问题。

答案 3 :(得分:2)

使用numpy

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

注意:如果您可以使用.tolist() s。

,则无需numpy.ndarray

答案 4 :(得分:1)

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]

答案 5 :(得分:1)

简单的oneliners

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]

答案 6 :(得分:0)

使用字典,

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


index_dict = {}
 
for index, word in enumerate(scores):
    if word > min_score_thresh :
        index_dict.setdefault(word, index)
 

print(*index_dict.values()) 

给予

2 4

[Program finished]