Estoy tratando de obtener una función en la que si clasificas (nombre de lista) clasificaría todos los números dentro de esa lista de menor a mayor.
No estoy seguro de lo que está mal con el mío, pero necesito algo de ayuda, ya que la salida no es realmente la mejor, sino la mejor para los dos primeros números del número.
Ejemplo:
Si la lista tiene 23, 212, 44 en la ordenación, la salida será así.
Salida:
212,23,44
Debería ser 23, 44, 212.
Código:
def sort(my_list): size = len(my_list) for i in range(size): for j in range(size-i-1): if(my_list[j] > my_list[j+1]): tmp = my_list[j] my_list[j] = my_list[j+1] my_list[j+1] = tmp
Más código:
numbers=([]) amount=input("How many numbers are in your list? ") print("") counter = 0 ran = 0 while counter < int(amount): counter = counter + 1 ran = ran + 1 num3 = input(str(ran) + ". Input: ") try: val = int(num3) except ValueError: num3 = input(str(ran) + ". Input: ") sort(numbers) numbers.append(num3)
Parece que tu lista no contiene ningún número sino cadenas. Python no intenta adivinar lo que podría haber dentro de esas cadenas, por lo que obtienes un orden extraño.
Tienes dos opciones:
int
antes de compararlos ( if(int(my_list[j]) > int(my_list[j+1])):
python natural sort
para obtener respuestas sobre cómo implementar la “clasificación natural” en Python. Si solo quieres ordenarlo, usa ordenado:
sorted_my_list = sorted(my_list,key=int)
O para clasificarlo, en su lugar, usar
my_list.sort(key=int)
Si desea arreglar su progtwig, convierta my_list en ints o al menos compare enteros
if ( int(my_list[j]) > int(my_list[j+1])):
Además, puedes intercambiar dos variables en una statement:
my_list[j],my_list[j+1] = my_list[j+1],my_list[j]
Acabo de usar su código (acaba de agregar una statement de return
). Y devuelve los valores esperados:
def sort(my_list): size = len(my_list) for i in range(size): for j in range(size-i-1): if(my_list[j] > my_list[j+1]): tmp = my_list[j] my_list[j] = my_list[j+1] my_list[j+1] = tmp return my_list # Note I added this return statement print sort([23,212,44]) >>> [23, 44, 212]