J'ai pu vérifier que le findUniqueWords
résultat est un tri list
. Cependant, il ne renvoie pas la liste. Pourquoi?
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)
Et vous avez terminé, il vous suffit de le renvoyer à la liste:theList = list(theSet)
Terminé. Facile.theSet' into a sorted list with
fichier trié (theSet) `.Réponses:
list.sort
trie la liste en place, c'est-à-dire qu'elle ne renvoie pas de nouvelle liste. Ecrivezla source
return sorted(newList)
est plus court. Peu importe ici puisque la variable est locale, mais le tri sur place peut changer une variable partagée dans certains cas.a.append('x')
, oua.extend('x)
vous ne pouvez pas la chaînesort()
à la fin non plus . Il doit être divisé en 2 lignes. Cela aurait été mieux si les méthodes avaient renvoyé la liste! docs.python.org/3/tutorial/datastructures.html Ce même message m'a mordu en faisant exactement cela. Par conséquent, vous devez diviser la chose en deux lignes, vous devez utiliser.sort()
NOTsorted()
sur la liste après, car cela génère la même erreurl = ['1']; l = sorted(l.append('2'))
(je viens d'ajouter un point-virgule pour que vous puissiez couper / coller et exécuter)sort
fonction a- t-elle été conçue de cette façon? y a-t-il une surcharge de performances ou d'autres inconvénients si le renvoi de la liste triée au lieu de Aucun?print(newList.sort())
donnéNone
. Cependant, quand je l'ai fait,newList.sort()
puisprint(newList)
cela a fonctionné.Le problème est ici:
sort
ne renvoie pas la liste triée; il trie plutôt la liste en place.Utilisation:
la source
list.sort()
etsorted(list)
.Voici un e-mail de Guido van Rossum dans la liste des développeurs de Python expliquant pourquoi il a choisi de ne pas revenir
self
sur les opérations qui affectent l'objet et de ne pas en renvoyer une nouvelle.la source
split(":").lower()
c'est une mauvaise chaîne carsplit
renvoie une liste qui n'a pas delower
méthode.Python habituellement les retours
None
de fonctions et des méthodes qui mutent les données, telles quelist.sort
,list.append
etrandom.shuffle
, avec l'idée étant que le fait allusion qu'il a été de muter.Si vous souhaitez prendre un itérable et renvoyer une nouvelle liste triée de ses éléments, utilisez la
sorted
fonction intégrée.la source
Python a deux sortes de sortes: une méthode de tri (ou "fonction membre") et une fonction de tri . La méthode sort opère sur le contenu de l'objet nommé - considérez-le comme une action que l'objet prend pour se réorganiser . La fonction de tri est une opération sur les données représentées par un objet et renvoie un nouvel objet avec le même contenu dans un ordre trié.
Étant donné une liste d'entiers nommés,
l
la liste elle-même sera réorganisée si nous appelonsl.sort()
:Cette méthode n'a pas de valeur de retour. Mais que faire si nous essayons d'attribuer le résultat de
l.sort()
?r
maintenant équivaut à rien. C'est l'un de ces détails étranges et quelque peu ennuyeux qu'un programmeur est susceptible d'oublier après une période d'absence de Python (c'est pourquoi j'écris ceci, donc je n'oublie pas à nouveau).La fonction
sorted()
, par contre, ne fera rien sur le contenu del
, mais renverra une nouvelle liste triée avec le même contenu quel
:Sachez que la valeur renvoyée n'est pas une copie complète, soyez donc prudent avec les opérations à effet secondaire sur les éléments contenus dans la liste comme d'habitude:
la source
Pour comprendre pourquoi il ne renvoie pas la liste:
sort () ne renvoie aucune valeur tandis que la méthode sort () trie simplement les éléments d'une liste donnée dans un ordre spécifique - croissant ou décroissant sans renvoyer aucune valeur.
Le problème est donc de savoir
answer = newList.sort()
où la réponse est aucune.Au lieu de cela, vous pouvez simplement le faire
return newList.sort()
.La syntaxe de la méthode sort () est:
Alternativement, vous pouvez également utiliser la fonction intégrée de Python sorted () dans le même but.
Remarque: la différence la plus simple entre sort () et sorted () est: sort () ne renvoie aucune valeur tandis que sorted () renvoie une liste itérative.
Donc dans votre cas
answer = sorted(newList)
.la source
si vous souhaitez toujours utiliser le tri, vous pouvez le faire.
la source