He podido verificar que el findUniqueWordsresultado es ordenado list. Sin embargo, no devuelve la lista. ¿Por qué?
def findUniqueWords(theList):
    newList = []
    words = []
    # Read a line at a time
    for item in theList:
        # Remove any punctuation from the line
        cleaned = cleanUp(item)
        # Split the line into separate words
        words = cleaned.split()
        # Evaluate each word
        for word in words:
            # Count each unique word
            if word not in newList:
                newList.append(word)
    answer = newList.sort()
    return answer
                
theSet= set(theList)Y ya está, solo necesita devolverlo a la lista:theList = list(theSet)Listo. Fácil.theSet' into a sorted list withordenado (theSet) `.Respuestas:
list.sortordena la lista en su lugar, es decir, no devuelve una nueva lista. Solo escribefuente
return sorted(newList)Es más corto. No importa aquí ya que la variable es local, pero la ordenación in situ podría cambiar una variable compartida en algunos casos.a.append('x')oa.extend('x)no puede encadenarsort()en el extremo tampoco. Tiene que dividirse en 2 líneas. ¡Hubiera sido mejor si los métodos devolvieran la lista! docs.python.org/3/tutorial/datastructures.html Este mismo mensaje me mordió al hacer eso. En consecuencia, debe dividir la cosa en dos líneas, luego debe usar.sort()NOsorted()en la lista, ya que esto genera el mismo errorl = ['1']; l = sorted(l.append('2'))(acabo de agregar punto y coma para que pueda cortar / pegar y ejecutar)sortdiseñó la función de esta manera? ¿hay alguna sobrecarga de rendimiento u otros inconvenientes si devuelve la lista ordenada en lugar de None?print(newList.sort())diNone. Sin embargo, cuando lo hice,newList.sort()y luegoprint(newList)funcionó.El problema está aquí:
sortno devuelve la lista ordenada; más bien, ordena la lista en su lugar.Utilizar:
fuente
list.sort()ysorted(list).Aquí hay un correo electrónico de Guido van Rossum en la lista de desarrolladores de Python que explica por qué elige no regresar
selfa las operaciones que afectan el objeto y no devolver uno nuevo.fuente
split(":").lower()es una mala cadena porquesplitdevuelve una lista que no tiene unlowermétodo.Python habitualmente regresa
Nonede funciones y métodos que mutan los datos, comolist.sort,list.appendyrandom.shuffle, con la idea de que sugiere el hecho de que estaba mutando.Si desea tomar un iterable y devolver una nueva lista ordenada de sus elementos, use la
sortedfunción incorporada.fuente
Python tiene dos tipos de clasificaciones: un método de clasificación (o "función miembro") y una función de clasificación . El método de clasificación opera en el contenido del objeto nombrado; piense en él como una acción que el objeto está tomando para reordenarse a sí mismo . La función de clasificación es una operación sobre los datos representados por un objeto y devuelve un nuevo objeto con el mismo contenido en un orden ordenado.
Dada una lista de enteros llamada
lla lista misma se reordenará si llamamos al.sort():Este método no tiene valor de retorno. Pero, ¿y si tratamos de asignar el resultado de
l.sort()?rahora es igual a nada en realidad. Este es uno de esos extraños detalles, algo molesto que un programador es probable que se olvide de después de un período de ausencia del Python (que es por eso que estoy escribiendo esto, así que no me olvido otra vez).La función
sorted(), por otro lado, no hará nada al contenido del, pero devolverá una nueva lista ordenada con el mismo contenido quel:Tenga en cuenta que el valor devuelto no es una copia profunda , así que tenga cuidado con las operaciones de efectos secundarios sobre los elementos contenidos en la lista como de costumbre:
fuente
Para entender por qué no devuelve la lista:
sort () no devuelve ningún valor, mientras que el método sort () simplemente clasifica los elementos de una lista dada en un orden específico: ascendente o descendente sin devolver ningún valor.
Entonces el problema es con
answer = newList.sort()donde la respuesta es ninguna.En cambio, solo puedes hacer
return newList.sort().La sintaxis del método sort () es:
Alternativamente, también puede usar la función incorporada de Python sorted () para el mismo propósito.
Nota: La diferencia más simple entre sort () y sorted () es: sort () no devuelve ningún valor, mientras sorted () devuelve una lista iterable.
Entonces en tu caso
answer = sorted(newList).fuente
si aún quieres usar sort, puedes hacerlo.
fuente