我正在尝试从其他来源回收此代码,但是在理解第二行中的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']


在那里,您可以看到在最后一步中删除了“噪音”字样。

10-07 23:56