我正在尝试从其他来源回收此代码,但是在理解第二行中的for
循环时遇到了麻烦。有人可以澄清title = [x for x in title if x not in stopWords]
这行到底在做什么吗? stopWords
是单词列表。
def title_score(title, sentence):
title = [x for x in title if x not in stopWords]
count = 0.0
for word in sentence:
if (word not in stopWords and word in title):
count += 1.0
if len(title) == 0:
return 0.0
return count/len(title)
最佳答案
[x for x in title if x not in stopWords]
这是一个列表理解。这意味着构造一个
title
中所有项目的列表(即x for x in title
位),这些项目也不在stopWords
中(按if x not in stopWords
位)。您可以通过以下代码片段看到类似的效果。第一个创建一个包含范围
0..9
的所有数字的列表:>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
第二个添加了
if
子句以仅包含奇数:>>> [x for x in range(10) if x % 2 != 0]
[1, 3, 5, 7, 9]
这也许是一个更好的示例,与您的代码更加紧密地结合在一起:
>>> stopWords = "and all but if of the".split() ; stopWords
['and', 'all', 'but', 'if', 'of', 'the']
>>> title = "the sum of all fears".split() ; title
['the', 'sum', 'of', 'all', 'fears']
>>> [x for x in title]
['the', 'sum', 'of', 'all', 'fears']
>>> [x for x in title if x not in stopWords]
['sum', 'fears']
在那里,您可以看到在最后一步中删除了“噪音”字样。