Ich konnte überprüfen, ob findUniqueWords
dies zu einer Sortierung führt list
. Die Liste wird jedoch nicht zurückgegeben. Warum?
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)
Und wenn Sie fertig sind, müssen Sie es nur noch auf die ListetheList = list(theSet)
zurücksetzen : Fertig. Einfach.theSet' into a sorted list with
sortiertes (theSet) ` konvertieren .Antworten:
list.sort
sortiert die Liste an Ort und Stelle, dh es wird keine neue Liste zurückgegeben. Einfach schreibenquelle
return sorted(newList)
ist kürzer. Dies spielt hier keine Rolle, da die Variable lokal ist, aber die direkte Sortierung kann in einigen Fällen eine gemeinsam genutzte Variable ändern.a.append('x')
wird odera.extend('x)
Siesort()
am Ende auch nicht verketten können. Es muss in 2 Zeilen aufgeteilt werden. Es wäre schöner gewesen, wenn die Methoden die Liste zurückgegeben hätten! docs.python.org/3/tutorial/datastructures.html Dieselbe Nachricht hat mich dabei gebissen . Folglich müssen Sie das Ding in zwei Zeilen.sort()
sorted()
l = ['1']; l = sorted(l.append('2'))
sort
Funktion so gestaltet? Gibt es einen Leistungsaufwand oder andere Nachteile, wenn die sortierte Liste anstelle von Keine zurückgegeben wird?print(newList.sort())
gabNone
. Aber als ich es tatnewList.sort()
und dannprint(newList)
funktionierte es.Das Problem ist hier:
sort
gibt die sortierte Liste nicht zurück; Vielmehr wird die Liste sortiert.Verwenden:
quelle
list.sort()
undsorted(list)
.Hier ist eine E-Mail von Guido van Rossum in Pythons Entwicklerliste, in der erklärt wird, warum er sich dafür entscheidet, keine
self
Operationen zurückzugeben, die sich auf das Objekt auswirken, und keine neuen zurückzugeben.quelle
split(":").lower()
ist es eine schlechte Kette, weilsplit
eine Liste zurückgegeben wird, die keinelower
Methode hat.Python kehrt gewöhnlich
None
von Funktionen und Methoden zurück, die die Daten mutieren, wie z. B.list.sort
,list.append
undrandom.shuffle
mit der Idee, dass es auf die Tatsache hinweist, dass es mutiert.Wenn Sie eine Iterable verwenden und eine neue, sortierte Liste ihrer Elemente zurückgeben
sorted
möchten , verwenden Sie die integrierte Funktion.quelle
Python hat zwei Arten von Sorten: eine Sortierverfahren (oder „Elementfunktion“) und eine Sortierfunktion . Die Sortiermethode verarbeitet den Inhalt des genannten Objekts. Stellen Sie sich das als eine Aktion vor, die das Objekt ausführt, um sich selbst neu zu ordnen . Die Sortierfunktion ist eine Operation über die von einem Objekt dargestellten Daten und gibt ein neues Objekt mit demselben Inhalt in einer sortierten Reihenfolge zurück.
Bei einer Liste von Ganzzahlen mit dem Namen wird
l
die Liste selbst neu angeordnet, wenn wir Folgendes aufrufenl.sort()
:Diese Methode hat keinen Rückgabewert. Aber was ist, wenn wir versuchen, das Ergebnis von zuzuweisen
l.sort()
?r
jetzt ist eigentlich nichts mehr. Dies ist eines dieser seltsamen, etwas nervigen Details, die ein Programmierer nach einer Abwesenheit von Python wahrscheinlich vergessen wird (weshalb ich dies schreibe, also ich es nicht wieder vergesse).Die Funktion
sorted()
hingegen ändert nichts am Inhalt vonl
, gibt jedoch eine neue, sortierte Liste mit demselben Inhalt zurück wiel
:Beachten Sie, dass es sich bei dem zurückgegebenen Wert nicht um eine tiefe Kopie handelt. Seien Sie daher bei Nebenwirkungen wie bei Elementen, die in der Liste enthalten sind, wie gewohnt vorsichtig:
quelle
Um zu verstehen, warum die Liste nicht zurückgegeben wird:
sort () gibt keinen Wert zurück, während die sort () -Methode nur die Elemente einer bestimmten Liste in einer bestimmten Reihenfolge sortiert - aufsteigend oder absteigend ohne einen Wert zurückzugeben.
Das Problem ist also,
answer = newList.sort()
wo die Antwort keine ist.Stattdessen können Sie einfach tun
return newList.sort()
.Die Syntax der sort () -Methode lautet:
Alternativ können Sie für denselben Zweck auch die in Python integrierte Funktion sorted () verwenden.
Hinweis: Der einfachste Unterschied zwischen sort () und sorted () besteht darin, dass sort () keinen Wert zurückgibt, während sorted () eine iterierbare Liste zurückgibt.
Also in deinem Fall
answer = sorted(newList)
.quelle
Wenn Sie weiterhin sort verwenden möchten, können Sie dies tun.
quelle