es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Necesitamos realizar un ordenador de selección que pueda ordenar una lista de variables mixtas.

Estaba creando un código que realiza una ordenación por selección, pero cuando intenté ejecutarlo, me indicó que no se pueden comparar cadenas de texto y números enteros. Necesito ayuda.

El código:

def selection(collection):
    for i in range(len(collection)):
        # supongamos que el primer elemento es el más pequeño
        min_idx = i
        print(collection)
        for j in range(i+1, len(collection)):
             # comparar si los siguientes elementos son más pequeños
            if collection[min_idx] > collection[j]:
                min_idx = j # si sí, obtener el índice
        collection[i], collection[min_idx] = collection[min_idx], collection[i] 

La lista:

nlist = [19, 5, 'cat', 'rabbit', 2, 32, 'mice', 'dog', 7]

La salida requerida:

[2, 5, 7, 19, 32, 'cat', 'dog', 'mice', 'rabbit']

Error:

TypeError: '<' not supported between instances of 'int' and 'str'
Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema es que el algoritmo de selección de ordenamiento compara cada elemento con los demás elementos de la lista para ordenarlos en orden ascendente o descendente. Sin embargo, la lista actual ‘nlist’ contiene tanto elementos enteros como cadenas de texto, los cuales no se pueden comparar utilizando el operador ‘>’.

    Para resolver el problema, debemos asegurarnos de que todos los elementos de la lista sean del mismo tipo de dato. Una forma de hacer esto es asegurarnos de que todos los elementos sean enteros o cadenas de texto.

    Aquí tienes una versión actualizada del código que convierte todos los enteros en cadenas de texto para que se puedan comparar con los demás elementos de tipo cadena:

    def selection(collection):
        for i in range(len(collection)):
            #asumimos que el primer elemento es el más pequeño
            min_idx = i
            print(collection)
            for j in range(i+1, len(collection)):
                 #comparamos si los siguientes elementos son más pequeños
                if str(collection[min_idx]) > str(collection[j]):
                    min_idx = j #si es así, obtenemos el índice
            collection[i], collection[min_idx] = collection[min_idx], collection[i] 
    
    nlist = [19, 5, 'cat', 'rabbit', 2, 32, 'mice', 'dog', 7]
    selection(nlist)
    print(nlist)
    

    La salida será:

    [2, 5, 7, 19, 32, 'cat', 'dog', 'mice', 'rabbit']
    

    Observa que todos los enteros ahora son cadenas de texto, y la lista está correctamente ordenada en orden ascendente.

Comments are closed.