使用列表理解从列表中删除单词

时间:2013-10-04 07:49:29

标签: python list

我试图从列表中删除不必要的单词(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']

这有什么问题?

4 个答案:

答案 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)

如果你不介意:

  1. 删除重复项
  2. 保留原始订单
  3. 你可以简单地使用'设置' (这是核心算法):

    >>> 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)]