Udało mi się zweryfikować, że findUniqueWords
powoduje to posortowanie list
. Jednak nie zwraca listy. Czemu?
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)
, wystarczy, że wrzucisz to z powrotem do listy:theList = list(theSet)
Gotowe. Łatwo.theSet' into a sorted list with
posortowany (theSet) `.Odpowiedzi:
list.sort
sortuje listę w miejscu, tzn. nie zwraca nowej listy. Tylko napiszźródło
return sorted(newList)
jest krótszy. Nie ma to znaczenia, ponieważ zmienna jest lokalna, ale sortowanie w miejscu może w niektórych przypadkach zmienić wspólną zmienną.a.append('x')
, luba.extend('x)
nie możesz łańcuchsort()
na końcu każdej. Musi być podzielony na 2 linie. Byłoby ładniej, gdyby metody zwracały listę! docs.python.org/3/tutorial/datastructures.html Ta sama wiadomość ugryzła mnie, właśnie to. W konsekwencji musisz podzielić rzecz na dwie linie, potem musisz użyć.sort()
NOTsorted()
na liście, ponieważ generuje to ten sam błądl = ['1']; l = sorted(l.append('2'))
(właśnie dodałem średnik, abyś mógł wyciąć / wkleić i uruchomić)sort
funkcja została zaprojektowana w ten sposób? czy występuje jakikolwiek narzut wydajności lub inne wady, jeśli zwraca posortowaną listę zamiast Brak?print(newList.sort())
dałNone
. Jednak kiedy to zrobiłem,newList.sort()
i wtedyprint(newList)
zadziałało.Problem jest tutaj:
sort
nie zwraca posortowanej listy; raczej sortuje listę w miejscu.Posługiwać się:
źródło
list.sort()
isorted(list)
.Oto e-mail od Guido van Rossuma z listy deweloperów Pythona wyjaśniający, dlaczego zdecydował się nie wracać
self
do operacji, które mają wpływ na obiekt i nie zwraca nowego.źródło
split(":").lower()
to zły łańcuch, ponieważsplit
zwraca listę, która nie malower
metody.Python zwykle powraca
None
z funkcji i metod, które modyfikują dane, takich jaklist.sort
,list.append
irandom.shuffle
, z założeniem, że wskazuje na fakt, że ulegał mutacji.Jeśli chcesz wziąć iterowalną i zwrócić nową, posortowaną listę jej elementów, użyj
sorted
funkcji wbudowanej.źródło
Python ma dwa rodzaje rodzaje: rodzajem metody (lub „funkcji członka”) oraz sortowania funkcji . Metoda sort działa na zawartości nazwanego obiektu - traktuj ją jako działanie, które obiekt podejmuje w celu zmiany kolejności . Funkcja sortowania to operacja na danych reprezentowanych przez obiekt i zwraca nowy obiekt o tej samej zawartości w posortowanej kolejności.
Biorąc pod uwagę listę liczb całkowitych o nazwie,
l
sama lista zostanie zmieniona, jeśli wywołaszl.sort()
:Ta metoda nie ma wartości zwracanej. Ale co, jeśli spróbujemy przypisać wynik
l.sort()
?r
teraz to właściwie nic. Jest to jedna z tych dziwnych, trochę irytujących szczegółów, które programista może zapomnieć o po okresie nieobecności w Pythonie (dlatego piszę to, tak I nie zapomnij ponownie).Z
sorted()
drugiej strony funkcja nie zrobi nic z zawartościąl
, ale zwróci nową, posortowaną listę o tej samej zawartości col
:Należy pamiętać, że zwracana wartość nie jest głęboką kopią , więc jak zwykle zachowaj ostrożność w przypadku działań ubocznych na elementach zawartych na liście:
źródło
Aby zrozumieć, dlaczego nie zwraca listy:
sort () nie zwraca żadnej wartości, a metoda sort () po prostu sortuje elementy podanej listy w określonej kolejności - rosnąco lub malejąco bez zwracania żadnej wartości.
Więc problem jest z
answer = newList.sort()
że nie ma odpowiedzi.Zamiast tego możesz po prostu to zrobić
return newList.sort()
.Składnia metody sort () jest następująca:
Alternatywnie, w tym samym celu możesz również użyć wbudowanej w Pythonie funkcji sortowanej ().
Uwaga: Najprostsza różnica między sort () i sort () jest taka: sort () nie zwraca żadnej wartości, podczas gdy sort () zwraca iterowalną listę.
Więc w twoim przypadku
answer = sorted(newList)
.źródło
jeśli nadal chcesz używać sortowania, możesz to zrobić.
źródło