我正在尝试从其他来源回收此代码,但我无法理解第二行中的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)
答案 0 :(得分:2)
[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']
在那里你可以看到在最后一步中删除了“噪音”字样。
答案 1 :(得分:0)
好吧,他们说python就像可运行的伪代码,我猜这适用于此。它正在创建一个列表并在其中放入标题内的每个项目,其中该项目不在stopWords中
答案 2 :(得分:0)
这是一个列表理解,相当于这个循环:
newtitle = []
for x in title:
if x not in stopwords;
newtitle.append(x)
title = newtitle
换句话说,如果它们也出现在title
中,它会有效删除<{1}}中的任何字词。