La tienda que más vendió ayer
Tu jefa de ventas quiere saber, a primera hora, qué tienda vendió más ayer y cuál menos.
Los importes llegan en el orden en que cada tienda cerró caja. Así no se ve nada a simple vista.
Ordenados de mayor a menor, la respuesta está en la primera y en la última línea. Ordenar es uno de los trabajos que más hace un ordenador.
Al final de esta lección
Nota
Puedo ordenar datos y explicar por qué importa.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Ordenar | colocar los datos según un criterio | |
| Ascendente | de menor a mayor | |
| Descendente | de mayor a menor | sorted(sales, reverse=True) |
| Ordenación por selección | buscar el menor y ponerlo delante, una y otra vez | |
| Intercambio | cambiar de sitio dos elementos | |
| Pasada | una vuelta completa del algoritmo sobre la lista |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Ordenar sirve para encontrar y decidir
Unos datos ordenados se leen mejor: los extremos están al principio y al final. También permiten la búsqueda binaria, que solo funciona con una lista ordenada.
En Python, sorted(lista) devuelve una lista nueva ordenada y deja la original igual. lista.sort() ordena la propia lista. Con reverse=True el orden es descendente.
Prueba: ordenar las ventas
# Importe de las ventas de cada tienda ayer, en euros.
sales = [1250, 980, 2310, 640, 1875]
print("Sin ordenar:", sales)
print("De menor a mayor:", sorted(sales))
print("De mayor a menor:", sorted(sales, reverse=True))
print("La lista original no cambia:", sales)
sales.sort() # sort() cambia la propia lista
print("Tras sort():", sales)
# Los números guardados como texto se ordenan letra a letra.
codes = ["10", "9", "100", "25"]
print("Texto ordenado:", sorted(codes))
# Cambia codes por números sin comillas: [10, 9, 100, 25], y ejecuta.
Un error frecuente
Advertencia
Mucha gente cree que "100" va detrás de "9" al ordenar. Eso solo pasa con números. Si los datos son texto, se comparan letra a letra, y "1" va antes que "9". Convierte los datos a número antes de ordenar, por ejemplo con int().
La ordenación por selección elige el menor
Python ya sabe ordenar, pero conviene saber cómo se hace por dentro. Es una pregunta típica de entrevista.
La ordenación por selección recorre la lista y busca el menor. Lo intercambia con el primero. Ya hay un elemento en su sitio.
Después repite con el resto: busca el menor de lo que queda y lo pone en la segunda posición. Así sigue hasta el final.
Prueba: ordenar facturas por selección
# Ordenación por selección: busca el menor y ponlo delante.
amounts = [45, 12, 78, 30]
for i in range(len(amounts)):
smallest = i
for j in range(i + 1, len(amounts)):
if amounts[j] < amounts[smallest]:
smallest = j
# Intercambia el menor con el elemento de la posición i.
temp = amounts[i]
amounts[i] = amounts[smallest]
amounts[smallest] = temp
print("Pasada", i + 1, ":", amounts)
# Prueba con [5, 4, 3, 2, 1] y mira cada pasada.
Ejemplo resuelto: ordenar 45, 12, 78 y 30
| Pasada | Lista al empezar | Menor de lo que queda | Intercambio | Lista al acabar |
|---|---|---|---|---|
| 1 | [45, 12, 78, 30] | 12 | 12 con 45 | [12, 45, 78, 30] |
| 2 | [12, 45, 78, 30] | 30 | 30 con 45 | [12, 30, 78, 45] |
| 3 | [12, 30, 78, 45] | 45 | 45 con 78 | [12, 30, 45, 78] |
| 4 | [12, 30, 45, 78] | 78 | Ninguno | [12, 30, 45, 78] |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.