我有以下数组:
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]
请分享我的想法,谢谢
答案 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]