Я был в состоянии проверить, что findUniqueWords
результат приводит к сортировке list
. Тем не менее, он не возвращает список. Зачем?
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)
И все готово, вам нужно только привести его обратно к списку:theList = list(theSet)
Готово. Легко.theSet' into a sorted list with
отсортированный (theSet) `.Ответы:
list.sort
сортирует список на месте, т.е. он не возвращает новый список. Просто пишиисточник
return sorted(newList)
короче Здесь не имеет значения, поскольку переменная является локальной, но сортировка на месте может изменить общую переменную в некоторых случаях.a.append('x')
, илиa.extend('x)
вы не можете цепиsort()
на конце каждой. Он должен быть разбит на 2 строки. Было бы лучше, если бы методы возвращали список! docs.python.org/3/tutorial/datastructures.html Это то же самое сообщение меня укусило . Следовательно, вы должны разбить эту вещь на две строки. После этого вы должны использовать.sort()
NOTsorted()
в списке, поскольку это приводит к той же ошибкеl = ['1']; l = sorted(l.append('2'))
(я просто добавилsort
функция была разработана таким образом? есть ли какие-либо издержки производительности или другие недостатки, если вместо отсортированного списка возвращается None?print(newList.sort())
далNone
. Однако, когда я сделал,newList.sort()
и тогдаprint(newList)
это работало.Проблема здесь:
sort
не возвращает отсортированный список; скорее, это сортирует список на месте.Использование:
источник
list.sort()
иsorted(list)
.Вот электронное письмо от Гвидо ван Россума из списка разработчиков Python, объясняющее, почему он решил не возвращаться
self
к операциям, которые влияют на объект, и не возвращать новый.источник
split(":").lower()
это плохая цепочка, потому чтоsplit
возвращает список, у которого нетlower
метода.Python обычно возвращается
None
из функций и методов, которые изменяют данные, таких какlist.sort
,list.append
иrandom.shuffle
, с мыслью о том, что он намекает на тот факт, что он мутировал.Если вы хотите взять итерацию и вернуть новый отсортированный список ее элементов, используйте
sorted
встроенную функцию.источник
Python имеет два вида сортировки: метод сортировки (или «функция-член») и функция сортировки . Метод sort работает с содержимым названного объекта - думайте о нем как о действии, которое объект предпринимает, чтобы изменить порядок себя . Функция сортировки представляет собой операцию над данными, представленными объектом, и возвращает новый объект с тем же содержимым в отсортированном порядке.
При заданном списке целых чисел
l
сам список будет переупорядочен, если мы вызовемl.sort()
:Этот метод не имеет возвращаемого значения. Но что если мы попытаемся присвоить результат
l.sort()
?r
теперь фактически ничего не равно. Это одна из тех странных, несколько раздражающих деталей, о которых программист, вероятно, забудет после периода отсутствия в Python (именно поэтому я пишу это, поэтому я не забываю снова).Функция
sorted()
, с другой стороны, не будет ничего делать с содержимымl
, но вернет новый отсортированный список с тем же содержимым, что иl
:Имейте в виду, что возвращаемое значение не является глубокой копией , поэтому будьте осторожны с побочными эффектами над элементами, содержащимися в списке, как обычно:
источник
Чтобы понять, почему он не возвращает список:
сортировать () не возвращает никакого значения , а вид () метод просто сортирует элементы данного списка в определенном порядке - по возрастанию или по убыванию без возвращения никакого значения.
Так что проблема в том,
answer = newList.sort()
где нет ответа.Вместо этого вы можете просто сделать
return newList.sort()
.Синтаксис метода sort ():
Кроме того, вы также можете использовать встроенную функцию Python sorted () для той же цели.
Примечание. Самое простое различие между sort () и sorted () состоит в том, что sort () не возвращает никакого значения, а sorted () возвращает итеративный список.
Так и в вашем случае
answer = sorted(newList)
.источник
если вы все еще хотите использовать сортировку, вы можете сделать это.
источник