在二维列表Python中以最小总和返回行索引

时间:2012-10-25 00:47:13

标签: python

我在python中使用二维列表,我需要找到列表中每个项目的总和,然后返回具有最低值的索引。

它应该像这样返回:

Row([[1000, 30], [12, 23], [560, 30, 1]])
1
Row([[10, 9], [20, 1, 2], [1, 3]])
2

这就是我目前在shell中所拥有的:

def Row(S):
count=0
for r in range(len(S[0])):
    for c in range(len(S)):
        count += sum([r])
        return r

我无法获取shell中的代码以返回具有最低总和的二维列表中的indice。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

你可以在一行中完成:

minidx = min(enumerate(data), key=lambda x:sum(x[1]))[0]

虽然我更愿意进行解包(而不是索引结果):

minidx, minlist = min(enumerate(data), key=lambda x:sum(x[1]))

这有另一个好处,你可以快速处理具有最小总和的列表...虽然这很容易获得一旦你有索引......

答案 1 :(得分:1)

您可以指定"键"到min根据某些任意标准获得最小列表。使用此功能,我们只需一行即可完成:

def min_sum(data):
    return min(xrange(len(data)), key=lambda i: sum(data[i]))

答案 2 :(得分:0)

def row(data):
    sums = [sum(x) for x in data]
    return sums.index(min(sums))

print row([[1000, 30], [12, 23], [560, 30, 1]])