我正在尝试从列表中删除不必要的单词(an、a、the)
Test = ['a', 'an', 'the', 'love']
unWantedWords = ['a', 'an', 'the']
RD1 = [x for x in Test if x != unWantedWords]
print(RD1)
output ->['a', 'an', 'the', 'love']
这有什么问题?
问题是您将值 x 与整个列表 unWantedWords 进行比较。
RD1 = [x for x in Test if x != unWantedWords]
将 != 替换为 not in 以检查 x 是否...不在!
RD1 = [x for x in Test if x not in unWantedWords]
RD1 = [x for x in Test if x not in unWantedWords]
unWantedWords 是一个数组,您正在将您的单词与一个数组进行比较,这就是它不起作用的原因。
如果你不介意:
你可以简单地使用'set'(这里是核心算法):
>>> Test = ['a', 'an', 'the', 'love']
>>> unWantedWords = ['a', 'an', 'the']
>>> print set(Test) - set(unWantedWords)
set(['love'])
>>> print list(set(Test) - set(unWantedWords))
['love']
这具有优化复杂性的优点。
当然,您可以包装此代码以保留重复项和顺序...
这是错误的。
RD1 = [x for x in Test if x != unWantedWords]
if x != unWantedWords的条件检查 x 是否等于列表 unWantedWords,而不是检查 x 在 unWantedWords 中是否存在。
条件始终为真,因为 x 是字符串而不是列表。因此,您的所有单词都会添加到列表中。
正确的成语是if x not in unWantedWords。
你可以做,RD1 = [x for x in Test if x not in set(unWantedWords)]