DIFERENTES EJEMPLOS DE ORDENACIÓN NUMÉRICO Y LITERAL
En Python, hay varios algoritmos de ordenación que puedes utilizar para ordenar listas o arreglos.
Además, también exploraremos cómo trabajar con literales en Python.
Algoritmos de Ordenación Numérico
Algunos ejemplos de algoritmos de ordenación numéricos en Python:
Ordenación por Inserción (Insertion Sort): En este algoritmo, se construye una lista ordenada uno a uno insertando elementos no ordenados en su posición correcta.
Aquí tienes un ejemplo en Python:
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
nums = [4, 2, 7, 1, 9, 5]
insertion_sort(nums)
print(nums) # Salida [1, 2, 4, 5, 7, 9]
SALIDA POR PANTALLA
Ordenación por Combinación (Merge Sort): Este algoritmo divide la lista en mitades, ordena cada mitad y luego combina las mitades ordenadas.
Aquí tienes un ejemplo en Python:
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
merge_sort(left_half)
merge_sort(right_half)
i, j, k = 0, 0, 0
while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
arr[k] = left_half[i]
i += 1
else:
arr[k] = right_half[j]
j += 1
k += 1
while i < len(left_half):
arr[k] = left_half[i]
i += 1
k += 1
while j < len(right_half):
arr[k] = right_half[j]
j += 1
k += 1
nums = [4, 2, 7, 1, 9, 5]
merge_sort(nums)
print(nums) # Salida [1, 2, 4, 5, 7, 9]
SALIDA POR PANTALLA
Literales en Python
En Python, los literales son valores primitivos que se toman de forma literal. Algunos ejemplos de literales son:
Cadenas de texto: "Hola, soy un literal"
Números: 1, 1.5, -5.2
Ordenación Numérica y Literal en Python 3.X
Python ofrece varias formas de ordenar listas.
Veamos algunos ejemplos:
1. Ordenación por defecto (orden natural)
La ordenación por defecto en Python organiza los elementos según su tipo de dato.
Para números (int, float), ordena de menor a mayor.
Para cadenas (str), ordena alfabéticamente (mayúsculas antes que minúsculas con acentos).
numeros = [5, 1, 8, 3, 2]
print(sorted(numeros)) # Salida: [1, 2, 3, 5, 8]
palabras = ["Hola", "mundo", "banana", "adiós"]
print(sorted(palabras)) # Salida: ["Hola", "adiós", "banana", "mundo"]
SALIDA POR PANTALLA
2. Ordenación inversa
Para ordenar en orden inverso, podemos usar el argumento reverse=True en la función sorted.
numeros = [5, 1, 8, 3, 2]
print(sorted(numeros, reverse=True)) # Salida: [8, 5, 3, 2, 1]
palabras = ["Hola", "mundo", "banana", "adiós"]
print(sorted(palabras, reverse=True)) # Salida: ["mundo", "banana", "adiós", "Hola"]
SALIDA POR PANTALLA
3. Ordenación con función personalizada
Podemos definir una función para especificar cómo comparar los elementos. La función recibe dos elementos y devuelve True si el primero debe ir antes que el segundo en la ordenación.
def ordenar_por_longitud(palabra1, palabra2):
return len(palabra1) < len(palabra2) # Ordena por longitud creciente
palabras = ["Hola", "mundo", "banana", "adiós"]
print(sorted(palabras, key=ordenar_por_longitud)) # Salida: ["Hola", "adiós", "banana", "mundo"]
En este ejemplo, la función ordenar_por_longitud ordena las palabras por su longitud de menor a mayor.
Se puede utilizar cualquier criterio en la función personalizada para definir el orden deseado.
Al ejecutarlo da este error: ordenar_por_longitud() missing 1 required positional argument: 'palabra2'
El problema en este código es que la función ordenar_por_longitud espera dos argumentos (palabra1 y palabra2), pero al usarla como clave en la función sorted(), se espera que solo tome un argumento.
Para solucionarlo, puedes definir ordenar_por_longitud como una función lambda que tome una sola palabra y calcule su longitud.
Aquí te muestro cómo hacerlo:
palabras = ["Hola", "mundo", "banana", "adiós"]
print(sorted(palabras, key=lambda palabra: len(palabra)))
Esta expresión lambda toma una palabra como entrada y devuelve su longitud, que es lo que quieres usar como criterio de ordenación.
De esta manera, evitas el error que estabas teniendo.
4. Ordenación de listas con elementos mixtos (números y cadenas)
Si la lista contiene elementos de diferentes tipos (por ejemplo, números y cadenas), la ordenación por defecto intentará convertir todo a un tipo común, lo que puede dar resultados inesperados.
Para evitar esto, se recomienda ordenar por separado los elementos numéricos y literales, o definir una función personalizada que maneje ambos tipos correctamente.
Algunos ejemplos más de ordenación numérica y literal en Python 3.x:
Ordenación Numérica:
# Ordenación de una lista de números de forma ascendente
numeros = [10, 5, 8, 2, 3]
numeros_ordenados = sorted(numeros)
print(numeros_ordenados) # Salida: [2, 3, 5, 8, 10]
# Ordenación de una lista de números de forma descendente
numeros = [10, 5, 8, 2, 3]
numeros_ordenados = sorted(numeros, reverse=True)
print(numeros_ordenados) # Salida: [10, 8, 5, 3, 2]
# Ordenación de una lista de tuplas por un elemento numérico
datos = [("Juan", 25), ("Ana", 18), ("Pedro", 30)]
datos_ordenados = sorted(datos, key=lambda x: x[1])
print(datos_ordenados) # Salida: [("Ana", 18), ("Juan", 25), ("Pedro", 30)]
SALIDA POR PANTALLA
Ordenación Literal:
# Ordenación de una lista de palabras en orden alfabético
palabras = ["manzana", "banana", "cereza", "dátil"]
palabras_ordenadas = sorted(palabras)
print(palabras_ordenadas) # Salida: ["banana", "cereza", "dátil", "manzana"]
# Ordenación de una lista de strings por longitud de forma ascendente
frases = ["Hola", "Hola mundo", "Hola a todos"]
frases_ordenadas = sorted(frases, key=len)
print(frases_ordenadas) # Salida: ["Hola", "Hola a todos", "Hola mundo"]
# Ordenación de una lista de diccionarios por un campo literal
personas = [{"nombre": "Juan", "edad": 25}, {"nombre": "Ana", "edad": 18}, {"nombre": "Pedro", "edad": 30}]
personas_ordenadas = sorted(personas, key=lambda x: x["nombre"])
print(personas_ordenadas) # Salida: [{"Ana", 18}, {"Juan", 25}, {"Pedro", 30}]
SALIDA POR PANTALLA
Ciertamente, en Python 3.x existen diferentes métodos y técnicas para ordenar listas de elementos numéricos y literales (cadenas de texto).
Aquí te presento algunos ejemplos:
Ordenación numérica:
# Lista de números desordenada
numeros = [5, 2, 8, 1, 9, 3]
# Ordenar la lista en orden ascendente
numeros.sort()
print(numeros) # Salida: [1, 2, 3, 5, 8, 9]
# Ordenar la lista en orden descendente
numeros.sort(reverse=True)
print(numeros) # Salida: [9, 8, 5, 3, 2, 1]
SALIDA POR PANTALLA
También puedes utilizar la función sorted() para obtener una nueva lista ordenada sin modificar la original:
numeros = [5, 2, 8, 1, 9, 3]
numeros_ordenados = sorted(numeros)
print(numeros_ordenados) # Salida: [1, 2, 3, 5, 8, 9]
Ordenación de cadenas de texto:
# Lista de cadenas desordenada
palabras = ["manzana", "naranja", "kiwi", "banana", "pera"]
# Ordenar la lista de cadenas alfabéticamente
palabras.sort()
print(palabras) # Salida: ['banana', 'kiwi', 'manzana', 'naranja', 'pera']
# Ordenar la lista de cadenas alfabéticamente (orden inverso)
palabras.sort(reverse=True)
print(palabras) # Salida: ['pera', 'naranja', 'manzana', 'kiwi', 'banana']
SALIDA POR PANTALLA
Puedes utilizar la función sorted()de la misma manera que con los números:
palabras = ["manzana", "naranja", "kiwi", "banana", "pera"]
palabras_ordenadas = sorted(palabras)
print(palabras_ordenadas) # Salida: ['banana', 'kiwi', 'manzana', 'naranja', 'pera']
Ordenación personalizada:
Python también te permite definir una función de clave personalizada para ordenar los elementos de acuerdo a criterios más complejos.
Por ejemplo, ordenar una lista de tuplas por el segundo elemento:
# Lista de tuplas
tuplas = [(2, 3), (1, 2), (3, 1), (2, 1)]
# Ordenar por el segundo elemento
tuplas.sort(key=lambda x: x[1])
print(tuplas) # Salida: [(3, 1), (2, 1), (1, 2), (2, 3)]
SALIDA POR PANTALLA
En este ejemplo, la función lambda x: x[1]se utiliza como clave para ordenar las tuplas según su segundo elemento.
Estos son solo algunos ejemplos básicos de cómo ordenar listas de números y cadenas de texto en Python.
Existen muchas más opciones y técnicas de ordenación dependiendo de tus necesidades específicas.
PREGUNTAS DE CONOCIMIENTOS BASICOS
A fin de reconocer el avance del conocimiento en este lenguaje de programación (Python 3.x) transcribo a continuación una serie de preguntas básicas cuyas respuestas la encontrara en las líneas desarrolladas hasta el presente módulo:
1. ¿Qué es un IDE y que funciones cumple? (mencionar sin conceptualizar)
2. ¿Cómo se define una variable en Python?
3. ¿Cuáles son las reglas básicas para la asignación de variables?
4. ¿Qué es una variable numérica en Python?
5. ¿Es necesario declarar una variable en Python?
6. ¿Cómo se asigna valores a una variable?
7. ¿Cuál es la diferencia entre una variable entera (int) y una variable flotante (float)?
8. ¿Cómo se declara una variable entera en Python?
9. ¿Cuál es el tipo de dato de la variable en la expresión: numero = 5.5?
10. ¿Cómo se declara una variable flotante en Python?
11. ¿Qué es una cadena de caracteres (string) en Python?
12. ¿Cómo se declara una cadena de caracteres en Python?
13. ¿Cómo pueden evaluarse una cadena de caracteres?
14. ¿Cuál es el resultado de la concatenación de las cadenas 'Hola' y 'Mundo' en Python?
15. ¿Cómo se convierte un valor numérico en una cadena de caracteres en Python?
16. ¿Qué es una constante?
17. ¿Cómo se identifica o definen las constantes?
Encontraran las respuestas en el próximo módulo