有人可以帮我理解python中的循环

时间:2015-01-29 01:08:25

标签: python for-loop

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

3 个答案:

答案 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}}中的任何字词。