我试图从列表中删除不必要的单词(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']
这有什么问题?
答案 0 :(得分:5)
问题是你要将值x与整个列表unWantedWords进行比较。
RD1 = [x for x in Test if x != unWantedWords]
替换!=而不是检查x是否......不在!
RD1 = [x for x in Test if x not in unWantedWords]
答案 1 :(得分:4)
RD1 = [x for x in Test if x not in unWantedWords]
unWanted Words是一个数组,你将你的单词与数组进行比较,这就是为什么它不起作用。
答案 2 :(得分:2)
如果你不介意:
你可以简单地使用'设置' (这是核心算法):
>>> Test = ['a', 'an', 'the', 'love']
>>> unWantedWords = ['a', 'an', 'the']
>>> print set(Test) - set(unWantedWords)
set(['love'])
>>> print list(set(Test) - set(unWantedWords))
['love']
这具有优化复杂性的优势。
当然,您可以包装此代码以保持重复和订购......
答案 3 :(得分:1)
这是错误的。
RD1 = [x for x in Test if x != unWantedWords]
你的条件如果x!= unWantedWords 检查x是否等于列表unWantedWords,而不是检查unWantedWords中是否存在x。
条件始终为true,因为x是字符串而不是列表。因此,您的所有单词都会添加到列表中。
如果x不在unWantedWords中,那么正确的习语将是。
你可以做RD1 = [x for x in Test if x not in set(unWantedWords)]