He podido verificar que el findUniqueWords
resultado 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 with
ordenado (theSet) `.Respuestas:
list.sort
ordena 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)sort
diseñó 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í:
sort
no 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
self
a las operaciones que afectan el objeto y no devolver uno nuevo.fuente
split(":").lower()
es una mala cadena porquesplit
devuelve una lista que no tiene unlower
método.Python habitualmente regresa
None
de funciones y métodos que mutan los datos, comolist.sort
,list.append
yrandom.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
sorted
funció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
l
la 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()
?r
ahora 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