2 回答

TA贡献1871条经验 获得超13个赞
in_lines = ['this is go:od',
'that example is bad',
'amp is a word']
def remove_words(in_list, bad_list):
out_list = []
for line in in_list:
words = ' '.join([word for word in line.split() if not any([phrase in word for phrase in bad_list]) ])
out_list.append(words)
return out_list
out_lines = remove_words(in_lines, ['amp', ':'])
print (out_lines)
听起来很奇怪,声明
word for word in line.split() if not any([phrase in word for phrase in bad_list])
一次完成这里所有的艰苦工作。它为应用于单个单词的“坏”列表中的每个短语创建一个True/False值列表。该any函数再次将这个临时列表压缩为单个True/False值,如果是False这样,则可以安全地将单词复制到基于行的输出列表中。
例如,删除所有包含 an 的单词的结果a如下所示:
remove_words(in_lines, ['a'])
>>> ['this is go:od', 'is', 'is word']
(也可以删除该for line in ..行。不过,此时,可读性确实开始受到影响。)

TA贡献1797条经验 获得超6个赞
这符合您的预期输出:
def remove_stop_words(lines):
stop_words = ['am', ':']
results = []
for text in lines:
tmp = text.split(' ')
for x in range(0, len(tmp)):
for st_w in stop_words:
if st_w in tmp[x]:
tmp[x] = ''
results.append(" ".join(tmp))
return results
添加回答
举报