Se eu quiser o valor máximo em uma lista, posso apenas escrever max(List)
, mas e se eu também precisar do índice do valor máximo?
Eu posso escrever algo como isto:
maximum=0
for i,value in enumerate(List):
if value>maximum:
maximum=value
index=i
Mas me parece entediante.
E se eu escrever:
List.index(max(List))
Em seguida, iterará a lista duas vezes.
Existe uma maneira melhor?
Respostas:
Existem muitas opções, por exemplo:
fonte
key
função é usada apenas para decidir qual elemento é máximo. Os elementos não são alterados.key=lambda e: e[1]
evitar a importação?itemgetter()
é mais rápido e evitar uma importação não é uma meta que vale a pena perseguir. Evitar dependências externas pode valer a pena em alguns casos, mas uma importação da biblioteca padrão não é um problema.Eu acho que a resposta aceita é ótima, mas por que você não faz isso explicitamente? Sinto que mais pessoas entenderiam seu código, e isso está de acordo com o PEP 8:
Este método também é cerca de três vezes mais rápido que a resposta aceita:
Resultados à medida que são executados no meu computador:
Outro conjunto:
fonte
numpy.argmax()
30 vezes mais rápido na minha máquina. Se a lista contiver objetos mais complicados do que meros números, a abordagem em minha resposta pode se tornar mais rápida. Outra vantagem dessa abordagem é que ela pode ser usada para iteradores arbitrários, não apenas para listas.Esta resposta é 33 vezes mais rápida que o @Escualo, assumindo que a lista é muito grande e assumindo que já é um np.array (). Eu tive que diminuir o número de execuções de teste porque o teste está analisando 10000000 elementos e não apenas 100.
Resultados no meu computador:
fonte
numpy.argmax
parece incrível até você deixar processar uma lista python padrão . Então a velocidade fica entre a versão explícita e a implícita. Eu achonp.array
que não apenas cria uma lista, mas salva algumas informações extras, como por exemplo, valores mínimo e máximo (apenas uma hipótese).Com a biblioteca interna do Python, é bem fácil:
Isso indica
max
para encontrar o maior número da lista[0, 1, 2, ..., len(a)]
, usando a função personalizadalambda x: a[x]
, que diz que0
é realmente2
,1
é realmente9
etc.fonte
fonte
max
saber apenas levar em consideração o primeiro item de cada tupla (v
) ao calcular o valor máximo?Eu sugeriria uma maneira muito simples:
Espero que ajude.
fonte
Se o valor máximo estiver presente mais de uma vez e você desejar obter todos os índices,
fonte
Talvez você precise de uma lista ordenada, afinal?
Tente o seguinte:
fonte
sorted_list
não possui índices, mas valores, portanto não funcionaria.desculpe por reviver esse tópico, mas achei que meu método valia a pena adicionar.
O nome da lista neste exemplo 'list'
Isso imprimirá o valor mais alto da lista com facilidade!
list.sort()
classifica a lista pelo valor do item na tabela ASCII , classificando de maneira eficaz a lista do menor para o maior. Em seguida, imprimo o último valor na lista (que será o maior número) usandoprint(list[-1])
.Espero que isto ajude!
fonte
Aqui está uma solução completa para sua pergunta usando as funções internas do Python:
fonte