[英]removing words from a list using list comprehension
我正在尝试从列表中删除不必要的单词(一个,一个,一个)
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是否为... not in!
RD1 = [x for x in Test if x not in unWantedWords]
RD1 = [x for x in Test if x not in unWantedWords]
unWantedWords是一个数组,您将单词与一个数组共同映射,这就是它不起作用的原因。
如果您不介意:
您可以简单地使用“设置”(这是核心算法):
>>> 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]
您的条件是否为x!= unWantedWords会检查x是否等于列表unWantedWords,而不是检查x在unWantedWords中是否存在。
该条件始终为true,因为x是一个字符串而不是一个列表。 因此,您所有的单词都会添加到列表中。
正确的习惯用法是, 如果x不在unWantedWords中 。
您可以这样做, RD1 = [x for x in Test if x not in set(unWantedWords)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.