Загадка метода строк Python - PullRequest
3 голосов
/ 11 февраля 2010

Следующий код должен печатать MyWords после удаления SpamWords [0]. Тем не мение; вместо того, чтобы возвращать «да», вместо этого возвращается «нет». Почему возвращается «None»?

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

Ответы [ 2 ]

7 голосов
/ 11 февраля 2010

Поскольку remove - это метод, который изменяет объект изменяемого списка, к которому он вызывается, и возвращает None.

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

Возможно, вы хотите:

>>> [word for word in MyWords.split() if word.upper() not in SpamWords]
['yes']
0 голосов
/ 11 февраля 2010

remove - это метод list (str.split возвращает список), а не str. Он изменяет исходный список (удаляя то, что вы передаете) и возвращает None, , а не измененный список.

...