Consegui verificar se isso findUniqueWords
resulta em uma classificação list
. No entanto, ele não retorna a 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)
E pronto, você só precisa devolvê-lo à lista:theList = list(theSet)
Concluído. Fácil.theSet' into a sorted list with
ordenado (theSet) `.Respostas:
list.sort
classifica a lista no local, ou seja, ela não retorna uma nova lista. Apenas escrevafonte
return sorted(newList)
é mais curto. Não importa aqui, pois a variável é local, mas a classificação no local pode alterar uma variável compartilhada em alguns casos.a.append('x')
oua.extend('x)
você não pode cadeiasort()
no final também. Ele deve ser dividido em 2 linhas. Teria sido melhor se os métodos retornassem a lista! docs.python.org/3/tutorial/datastructures.html Essa mesma mensagem me mordeu fazendo exatamente isso. Conseqüentemente, você tem que quebrar a coisa em duas linhas, você tem que usar.sort()
NOTsorted()
na lista a seguir, uma vez que este gera o mesmo errol = ['1']; l = sorted(l.append('2'))
(I acabou de adicionar ponto e vírgula para que você poderia cortar / colar e funcionamento)sort
função foi projetada dessa maneira? há alguma sobrecarga de desempenho ou outras desvantagens se retornar a lista classificada em vez de Nenhuma?print(newList.sort())
deuNone
. No entanto, quando eu fiz,newList.sort()
e entãoprint(newList)
funcionou.O problema está aqui:
sort
não retorna a lista classificada; em vez disso, classifica a lista no lugar.Usar:
fonte
list.sort()
esorted(list)
.Aqui está um e-mail de Guido van Rossum na lista de desenvolvedores do Python, explicando por que ele escolhe não retornar as
self
operações que afetam o objeto e não retorna um novo.fonte
split(":").lower()
é uma cadeia ruim porquesplit
retorna uma lista que não possui umlower
método.Python habitualmente retornos
None
de funções e métodos que transformam os dados, tais comolist.sort
,list.append
erandom.shuffle
, com a idéia de que ele sugere para o facto de ter sido mutação.Se você deseja fazer uma iterável e retornar uma nova lista classificada de seus itens, use a
sorted
função interna.fonte
O Python possui dois tipos de classificação: um método de classificação (ou "função de membro") e uma função de classificação . O método de classificação opera no conteúdo do objeto nomeado - pense nele como uma ação que o objeto está executando para se reordenar . A função de classificação é uma operação sobre os dados representados por um objeto e retorna um novo objeto com o mesmo conteúdo em uma ordem classificada.
Dada uma lista de números inteiros nomeados,
l
a própria lista será reordenada se chamarmosl.sort()
:Este método não tem valor de retorno. Mas e se tentarmos atribuir o resultado
l.sort()
?r
agora é igual a nada. Esta é uma daquelas estranhas detalhes, um pouco irritante que um programador é provável que esquecer depois de um período de ausência do Python (que é por isso que eu estou escrevendo isso, então eu não se esqueça de novo).A função
sorted()
, por outro lado, não fará nada com o conteúdo del
, mas retornará uma nova lista classificada com o mesmo conteúdo quel
:Esteja ciente de que o valor retornado não é uma cópia detalhada; portanto, tenha cuidado com operações com efeitos colaterais sobre os elementos contidos na lista, como de costume:
fonte
Para entender por que ele não retorna a lista:
sort () não retorna nenhum valor, enquanto o método sort () apenas classifica os elementos de uma determinada lista em uma ordem específica - crescente ou decrescente sem retornar nenhum valor.
Então o problema é
answer = newList.sort()
onde a resposta é nenhuma.Em vez disso, você pode simplesmente fazer
return newList.sort()
.A sintaxe do método sort () é:
Como alternativa, você também pode usar a função incorporada do Python classificada () para a mesma finalidade.
Nota: A diferença mais simples entre sort () e ordenada () é: sort () não retorna nenhum valor enquanto, classificada () retorna uma lista iterável.
Então no seu caso
answer = sorted(newList)
.fonte
Se você ainda deseja usar a classificação, pode fazer isso.
fonte