Python - 从列表中获取所有min元素及其索引

时间:2013-02-26 20:28:22

标签: python python-2.7

我有一个列表,其中包含多次出现的最小元素,如

a = [1,2,1,1,4,5,6]

我希望python返回元素1和列表中存在1的所有索引。我尝试使用

min_index, min_value = min(enumerate(a), key=operator.itemgetter(1))

仅给出首先出现1的索引。

感谢任何帮助。

2 个答案:

答案 0 :(得分:13)

我就是这样做的:

minimum = min(a)
indices = [i for i, v in enumerate(a) if v == minimum]

答案 1 :(得分:11)

确定最小元素,然后根据列表中的其他元素进行检查。

def locate_min(a):
    smallest = min(a)
    return smallest, [index for index, element in enumerate(a) 
                      if smallest == element]

将返回一个元组(min_element,[location,location,...])。如果我理解正确,这就是我想你想要的。例如:

>>> locate_min([1, 2, 1, 1, 4, 5, 6])
(1, [0, 2, 3])

此示例使用列表推导。如果您不熟悉它,它大致相当于以下for循环版本。 (使用第一个版本,这只是为了帮助您理解它是如何工作的)

def locate_min(a):
    min_indicies = []
    smallest = min(a)
    for index, element in enumerate(a):
            if smallest == element: # check if this element is the minimum_value
                    min_indicies.append(index) # add the index to the list if it is

    return smallest, min_indicies