繁体   English   中英

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

[英]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是一个数组,您将单词与一个数组共同映射,这就是它不起作用的原因。

如果您不介意:

  1. 删除重复项
  2. 保留原始订单

您可以简单地使用“设置”(这是核心算法):

>>> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM