列表及其索引列表中的最大值

zam*_*kib 6 python list nested-lists python-2.7

li = [[1,2], [2,3], [7,6]]
Run Code Online (Sandbox Code Playgroud)

如何有效地找到最大值及其索引?假设li我想:

max_value = 7

max_index = (2, 0)
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

max_value = 0
for row_idx, row in enumerate(alignment_matrix):    
    for col_idx, col in enumerate(row):
        if col > max_value:
            max_value = col
            max_index = (row_idx, col_idx)
Run Code Online (Sandbox Code Playgroud)

但是我需要一种有效的方法而不使用太多不必要的变量.

fal*_*tru 7

使用max生成器表达式,您可以更快地表达它:

max_value, max_index = max((x, (i, j))
                           for i, row in enumerate(li)
                           for j, x in enumerate(row))
Run Code Online (Sandbox Code Playgroud)

但是,时间复杂度是相同的,因为这个也使用嵌套循环.

UPDATE

正如@jonrsharpe指出的那样,对于重复的max_values,上面的解决方案将为您提供找到值的最大索引.

如果这不是您想要的,您可以传递key函数参数max来自定义行为:

max_value, max_index = max(((x, (i, j))
                            for i, row in enumerate(li)
                            for j, x in enumerate(row)),
                           key=lambda (x, (i, j)): (x, -i, -j))
Run Code Online (Sandbox Code Playgroud)