返回多维列表中最小值的索引列表

时间:2013-05-08 08:49:38

标签: python

这应该很简单。

我有一个多维的整数列表,例如:

a = [[5,5,5,4,6],[3,2,6,6,5],[7,2,2,5,6]]

我需要一种方法来返回编号最小的位置的索引列表。在这个例子中,它将是对应于值2的索引,或((1,1),(2,1),(2,2))。

我正在考虑列表理解方法,但我不确定。

4 个答案:

答案 0 :(得分:2)

是的,你可以使用列表理解:

>>> a = [[5,5,5,4,6],[3,2,6,6,5],[7,2,2,5,6]]

>>> minn = min(min(x) for x in a) #find the min value

>>> [(i,j) for i,x in enumerate(a) for j,y in enumerate(x) if y==minn]
[(1, 1), (2, 1), (2, 2)]

答案 1 :(得分:0)

>>> a = [[5,5,5,4,6],[3,2,6,6,5],[7,2,2,5,6]]
>>> res = []
>>> smallest = float('inf')
>>> for i, x in enumerate(a):
        for j, y in enumerate(x):
            if y < smallest:
                smallest = y
                res = [(i, j)]
            elif y == smallest:
                res.append((i, j))


>>> res
[(1, 1), (2, 1), (2, 2)]

答案 2 :(得分:0)

我不会给你快速的解决方案,因为这是一个简单的编程,但我会说两个嵌套的for循环和一个变量跟踪最小值及其位置就足够了。为了更加Pythonic,你可以试着让enumerate开始工作。

答案 3 :(得分:0)

aa = [[5,5,5,4,6],[3,2,6,6,5],[7,2,2,5,6]]    
min_ = min(i for a in aa for i in a)
[(i,j) for i,a in enumerate(aa) for j,b in enumerate(a) if b == min_]

[(1, 1), (2, 1), (2, 2)]