如何用Python查找数组中元素的位置?

2024-04-18 10:25:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下阵法:

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

我希望通过以下代码检索大于5的元素:

^{pr2}$

因此,这将导致我的结果:

[9.67, 6.7]

现在我希望得到这两个元素的位置,这是我预期的答案,将存储在变量x中:

x=[2,4]

请跟我分享一下想法,谢谢


Tags: 答案代码元素scorespr2阵法
3条回答
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)

通过列表理解获取索引(或值)很容易:

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

我们可以得到这两个,作为元组的列表:

^{pr2}$

然后我们可以使用zip*习惯用法来“转置”此列表:

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

或者在一个表达式中使用unpacking来包装:

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

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]

相关问题 更多 >