【发布时间】:2011-01-15 21:32:48
【问题描述】:
以下代码应该在删除 SpamWords[0] 后打印 MyWords。然而;而不是返回“是”,而是返回“无”。为什么返回“None”?
MyWords = "Spam yes"
SpamWords = ["SPAM"]
SpamCheckRange = 0
print ((MyWords.upper()).split()).remove(SpamWords[SpamCheckRange])
【问题讨论】:
以下代码应该在删除 SpamWords[0] 后打印 MyWords。然而;而不是返回“是”,而是返回“无”。为什么返回“None”?
MyWords = "Spam yes"
SpamWords = ["SPAM"]
SpamCheckRange = 0
print ((MyWords.upper()).split()).remove(SpamWords[SpamCheckRange])
【问题讨论】:
remove 是list 的方法(str.split 返回一个列表),而不是str。它会改变原始列表(删除您传递的内容)并返回None,不是修改后的列表。
【讨论】:
因为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']
【讨论】:
l 是 ['YES']。