删除列表中的所有特定字词

时间:2018-06-12 20:38:50

标签: python

我有一个像['land_transport', 'and', 'or', 'port', 'of', 'surveyor', 'and', 'organization']这样的列表。我想删除所有字词:andorof。因此,我想出了以下代码块

my_list = ['land_transport', 'and', 'or', 'port', 'of', 'surveyor', 'and', 'organization']
print('Before: {}'.format(my_list))
my_list = list(filter(lambda a: 'and' not in a and 'of' not in a and 'or' not in a, my_list))
print('After: {}'.format(my_list))

但是,我的代码给出了像这样的输出

Before: ['land_transport', 'and', 'or', 'port', 'of', 'surveyor', 'and', 'organization']
After: []

我想要的应该是

['land_transport', 'port', 'surveyor', 'organization']

当然,有几种方法可以解决。但我想坚持使用lambda函数来解决这个问题。对我的问题有任何建议吗?

3 个答案:

答案 0 :(得分:2)

您可以创建一个新列表,存储所有要过滤的单词:

my_list = ['land_transport', 'and', 'or', 'port', 'of', 'surveyor', 'and', 'organization']
to_remove = ['or', 'of', 'and']
new_list = list(filter(lambda x:x not in to_remove, my_list))

输出:

['land_transport', 'port', 'surveyor', 'organization']

答案 1 :(得分:1)

您的过滤使用不正确:

filter_set = {'and', 'or', 'of'}
my_list = list(filter(lambda a: a not in filter_set, my_list))

您希望my_list中的所有项目都不在filter_set中,请注意使用set,这会使查找更快(O(N) vs O(1))

答案 2 :(得分:1)

虽然以上答案符合需要,但我认为您打算删除停用词。

nltk是Python中最好的资源。您可以使用nltk.corpus.stopwords

如果您知道要移除实际的英语停止词,则不必进行太多操作。

from nltk.corpus import stopwords
word_list = ['land_transport', 'and', 'or', 'port', 'of', 'surveyor', 'and', 'organization']
filtered_words = [word for word in word_list if word not in stopwords.words('english')]

print(filtered_words)

['land_transport', 'port', 'surveyor', 'organization']

足底