获取列表中N个最大值的索引,使得这些值遵循给定条件

时间:2013-04-05 18:41:05

标签: python

Ids = [ i for i, v in heapq.nlargest(RN, enumerate(score_real_test), key=operator.itemgetter(1))] 

这将给出列表score_real_test中RN最大值的索引。是否有可能获得RN最大值的索引“在列表score_real_test并满足布尔条件COND”?

Ids应包含RN索引。

编辑:现在我使用这个解决方案,但它不是最好的解决方案:

score_real_test_2 = np.sort( [ v for i,v in enumerate(score_real_test) if pred_real_test[i] == NOVEL ] )
score_real_test_2 = score_real_test_2[len(score_real_test_2)-RN:]
large_dist_ids = [i for i in range(len(score_real_test)) if score_real_test[i] in score_real_test_2]

1 个答案:

答案 0 :(得分:0)

如果你想保持这是一个单行,你可以简单地用列表推导(或生成器表达式)替换枚举,根据条件预先过滤你的数据。

像这样:

Ids = [i for i, v in heapq.nlargest(RN, [(j,v) in enumerate(score_real_test) if pred_real_test[i] == NOVEL], key=operator.itemgetter(1))] 

或者如果你想更清楚,你可以在选择之前添加一个过滤步骤(仍然不需要预先排序):

tmp = [item for item in enumerate(score_real_test) if pred_real_test[item[0]] == NOVEL]
Ids = [i for i, v in heapq.nlargest(RN, tmp, key=operator.itemgetter(1))]