我有一个像['land_transport', 'and', 'or', 'port', 'of', 'surveyor', 'and', 'organization']
这样的列表。我想删除所有字词:and
,or
,of
。因此,我想出了以下代码块
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函数来解决这个问题。对我的问题有任何建议吗?
答案 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']
足底