查找列表中最小元素的索引仅适用于特定索引处的元素

时间:2019-04-24 17:44:01

标签: python

说我有以下列表:

possible_moves = [0, 1, 2, 3]
q_array = [4, 2, 3, 7, -10]

我只想为q_array中索引处的元素获取possible_moves中最小元素的索引。因此,两个列表的输出应为1。

我使用下面的代码实现了它,但实际上并不是Python语言。

best_value = q_array[random.choice(possible_moves)]
for move in possible_moves:
    if q_array[move] <= best_value:
        best_value = q_array[move]
        move_chosen = move
return move_chosen

编辑:返回的值应该是最小值的索引,而不是值本身。在上面的示例中,返回1是因为它是possible_moves

中具有索引的元素中的最小值的索引

3 个答案:

答案 0 :(得分:2)

构建仅包含所需元素的列表理解,然后找到该列表的min()

min([q_array[x] for x in possible_moves])

答案 1 :(得分:1)

您可以将min列表中的possible_moves函数与__getitem__列表中的q_array方法用作关键函数:

min(possible_moves, key=q_array.__getitem__)

这将返回:1

答案 2 :(得分:1)

将数据放入字典中,然后获取具有最小值的密钥。

>>> d = {i: q_array[i] for i in possible_moves}
>>> move_chosen = min(d, key=d.get)
1

这类似于blhsing's answer