2010-02-11 6 views
3

Le code suivant est censé imprimer MyWords après avoir supprimé SpamWords [0]. Toutefois; au lieu de retourner "oui", il retourne "Aucun". Pourquoi retourne-t-il "None"?Python String Method Conundrum

MyWords = "Spam yes" 
SpamWords = ["SPAM"] 
SpamCheckRange = 0 
print ((MyWords.upper()).split()).remove(SpamWords[SpamCheckRange]) 

Répondre

8

Parce que remove est une méthode qui change l'objet de liste mutable il est appelé, et retourne None.

l= MyWords.upper().split() 
l.remove(SpamWords[SpamCheckRange]) 
# l is ['YES'] 

Peut-être que vous voulez:

>>> [word for word in MyWords.split() if word.upper() not in SpamWords] 
['yes'] 
+0

Techniquement, 'l' est' ['YES'] '. –

+0

Bon point ... ajouté la version qui préserve l'affaire. – bobince

+0

Y at-il un autre que je peux accomplir cela sans avoir à enregistrer à l? – Pax

1

remove est une méthode de list (str.split renvoie une liste), non str. Il mute la liste d'origine (en supprimant ce que vous passez) et renvoie , et non une liste modifiée.