Si quiero el valor máximo en una lista, puedo escribir max(List)
, pero ¿y si también necesito el índice del valor máximo?
Puedo escribir algo como esto:
maximum=0
for i,value in enumerate(List):
if value>maximum:
maximum=value
index=i
Pero me parece tedioso.
Y si escribo:
List.index(max(List))
Luego iterará la lista dos veces.
¿Hay una mejor manera?
Respuestas:
Hay muchas opciones, por ejemplo:
fuente
key
función solo se utiliza para decidir qué elemento es máximo. Los elementos no se cambian.key=lambda e: e[1]
lugar y así evitar la importación?itemgetter()
es más rápido y evitar una importación no es un objetivo que valga la pena perseguir. Evitar dependencias externas puede valer la pena en algunos casos, pero una importación desde la biblioteca estándar no es un problema.Creo que la respuesta aceptada es excelente, pero ¿por qué no lo haces explícitamente? Siento que más personas entenderían su código, y eso está de acuerdo con PEP 8:
Este método también es aproximadamente tres veces más rápido que la respuesta aceptada:
Resultados a medida que se ejecutan en mi computadora:
Otro conjunto:
fuente
numpy.argmax()
, que es 30 veces más rápido en mi máquina. Si la lista contiene objetos más complicados que simples números, el enfoque en mi respuesta puede ser más rápido. Otra ventaja de este enfoque es que puede usarse para iteradores arbitrarios, no solo para listas.Esta respuesta es 33 veces más rápida que @Escualo suponiendo que la lista es muy grande y suponiendo que ya es un np.array (). Tuve que rechazar el número de ejecuciones de prueba porque la prueba está analizando 10000000 elementos, no solo 100.
Resultados en mi computadora:
fuente
numpy.argmax
luce increíble hasta que dejas que procese una lista estándar de Python. Entonces la velocidad se encuentra entre la versión explícita y la implícita. Supongonp.array
que no solo crea una lista, sino que guarda información adicional en ella, como por ejemplo valores mínimos y máximos (solo una hipótesis).Con la biblioteca incorporada de Python, es bastante fácil:
Esto le indica
max
que busque el número más grande en la lista[0, 1, 2, ..., len(a)]
, utilizando la función personalizadalambda x: a[x]
, que dice que0
es en realidad2
,1
es en realidad9
, etc.fuente
fuente
max
sabe tener en cuenta el primer elemento de cada tupla (v
) al calcular el valor máximo?Sugeriría una forma muy simple:
Espero eso ayude.
fuente
Si el valor máximo está presente más de una vez y desea obtener todos los índices,
fuente
¿Quizás necesita una lista ordenada de todos modos?
Prueba esto:
fuente
sorted_list
no tiene índices sino valores, por lo que no funcionaría.perdón por revivir este hilo, pero pensé que valía la pena agregar mi método.
El nombre de la lista en este ejemplo 'lista'
Eso imprimirá el valor más alto en la lista fácil como!
list.sort()
ordena la lista por el valor del elemento en la tabla ASCII , por lo que efectivamente clasifica la lista de menor a mayor. Luego simplemente imprimo el último valor en la lista (que será el mayor número) usandoprint(list[-1])
.¡Espero que esto ayude!
fuente
Aquí hay una solución completa a su pregunta utilizando las funciones integradas de Python:
fuente