2

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

它应该像这样返回:

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

这是我到目前为止在外壳中的内容:

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

我无法在 shell 中获取代码以返回具有最低总和的二维列表中的索引。有任何想法吗?

4

3 回答 3

1

您可以在 1 行中执行此操作:

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

虽然我更喜欢拆包(而不是索引结果):

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

这有一个附带好处,您可以快速处理具有最小总和的列表......尽管一旦有了索引就很容易获得......

于 2012-10-25T00:53:50.797 回答
1

您可以指定一个“键”来min根据一些任意标准获取列表的最小值。使用此功能,我们只需一行即可完成:

def min_sum(data):
    return min(xrange(len(data)), key=lambda i: sum(data[i]))
于 2012-10-25T00:54:04.430 回答
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]])
于 2012-10-25T00:49:25.243 回答