Skip to content

Instantly share code, notes, and snippets.

@mrroot5
Last active June 12, 2021 18:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrroot5/d4fd96fd7aa4d90f03f48e12b8b0b3e9 to your computer and use it in GitHub Desktop.
Save mrroot5/d4fd96fd7aa4d90f03f48e12b8b0b3e9 to your computer and use it in GitHub Desktop.
Python: obtener el valor e índice de una lista de números usando min / max. Keywords: python, max, min, list, array, values and index, index, values

Intro

THIS IS THE SPANISH VERSION, PLEASE REQUEST THE ENGLISH VERSION AND I WILL CREATE IT.

Para obtener el índice imaginaremos la siguiente lista de ejemplo y la llamaremos numbers:

numbers = [2, 0, 5, 8, 4]

Como podemos comprobar el mínimo es 0 y el máximo 8 que los podremos encontrar en la posición 1 y 3 de la lista.

Explicación del código

Esta será una explicación sencilla basada en los resultados pensada para una persona que no conozca bien Python. No entraré en detalle sobre el funcionamiento interno de max, enumerate, operator, etc. Además, como la explicación es la misma para el min y max,solo cambian sus valores, usaré el max como ejemplo:

max(enumerate(numbers), key=operator.itemgetter(1))
  • enumerate(numbers): si convertimos el enumerate a una lista obtendremos lo siguiente: [(0, 2), (1, 0), (2, 5), (3, 8), (4, 4)].
  • operator.itemgetter(1): hacemos que se revise la segunda (1) en vez de la primera posición (0).

¿Qué está pasando?

Haz una prueba, elimina , key=operator.itemgetter(1). y ejecuta el max, devolverá esto:

(4, 4)

¿Se entiende mejor? El resultado es equivalente a hacer max(enumerate(numbers), key=operator.itemgetter(0)) o directamete max(enumerate(numbers)). Lo que hacemos es decirle a max: "revisa la posición 0 en lugar de la posición 1".

En nuestro ejemplo de numbers, el primer valor es un 2. Con el enumerate obtenemos (0,2). El itemgetter(1) es como si le dijese al max: "revisa el 2 en vez del 0".

Respuesta original

# python3
import operator
"""
THIS IS THE SPANISH VERSION, PLEASE REQUEST THE ENGLISH VERSION AND I WILL POST IT
"""
def get_max(numbers):
return max(enumerate(numbers), key=operator.itemgetter(1))
def get_min(numbers):
return min(enumerate(numbers), key=operator.itemgetter(1))
if __name__ == '__main__':
user_input = list(map(int, input('Introduzca una lista de numeros separados con espacio: ').split()))
min_index, min_value = get_min(user_input)
max_index, max_value = get_max(user_input)
print(f'Min; index: {min_index}, value: {min_value}')
print(f'Max; index: {max_index}, value: {max_value}')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment