Calcular o elemento mínimo de uma lista é uma tarefa muito comum em programação. Em Python, calcula-se o mínimo de uma lista com a função integrada min
.
Agora, e se, além do valor de um elemento mínimo, também precisarmos calcular um índice de tal elemento na lista? Como podemos fazer isso sem escrever loops explícitos, em uma linha, usando a mesma min
função?
Aqui está uma linha que fornece o valor do mínimo e também o primeiro índice onde ele é realizado:
>>> l = [33, 788, 1, -14, 78, 11, 32, 11, 78, -1, -14]
>>> mn,idx = min( (l[i],i) for i in xrange(len(l)) )
>>> mn,idx
(-14, 3)
A razão pela qual isso funciona é porque a ordem padrão das tuplas em Python é lexicográfica , com o componente mais significativo à esquerda.
Desnecessário dizer que a dica também se aplica ao cálculo do elemento máximo, com a max
função embutida.
O truque é bastante geral e, portanto, deve generalizar para linguagens com funcionalidade semelhante em tuplas e listas.
Aproveitar!