Tengo una lista multidimensional en el formato:
list = [[1, 2, 3], [2, 4, 2], [0, 1, 1]]
¿Cómo obtengo el valor máximo del tercer valor de todas las sublistas? En pseudo código:
max(list[0][2], list[1][2], list[2][2])
Sé que esto se puede hacer iterando sobre la lista y extrayendo el tercer valor en una nueva lista, luego simplemente ejecutando max(list)
, pero me pregunto si esto se puede hacer usando un lambda o una lista de comprensión.
Solo usa max
con una expresión generadora:
>>> lst = [[1, 2, 3], [2, 4, 2], [0, 1, 1]] >>> max(l[2] for l in lst) 3
Además, no nombre su list
variables, está siguiendo el tipo.
Use la función zip
para obtener la lista de columnas y luego use una indexación simple para obtener la columna esperada:
>>> lst = [[1, 2, 3], [2, 4, 2], [0, 1, 1]] >>> >>> max(zip(*lst)[-1]) # in python 3.x max(list(zip(*lst))[-1]) 3
Otra alternativa y un enfoque más python es pasar una función key
a max
para obtener el artículo máximo basado en la función clave. En este caso, puede usar itemgetter(-1)
para obtener el artículo máximo basado en el índice deseado y luego, ya que la función max()
devuelve el artículo completo de su lista (sub-lista), puede obtener el artículo esperado indexando:
>>> from operator import itemgetter >>> max(lst, key=itemgetter(-1))[-1] 3
O más funcional:
>>> key_func = itemgetter(-1) >>> key_func(max(lst, key=key_func)) 3
la aplicación de max
en la lista devolverá la lista máxima, que no es lo que desea. De hecho, podría usar una lista de comprensión para extraer el tercer elemento, y luego aplicar max
en esa comprensión:
>>> lst = [[1, 2, 3], [2, 4, 2], [0, 1, 1]] >>> max([x[2] for x in lst]) 3