列表理解返回一个空列表

时间:2019-05-13 13:23:52

标签: python list syntax list-comprehension

我正在尝试编写一个函数,该函数遍历文件中具有特定标签的单词,然后通过使用列表理解将这些单词放入列表中。但是,我的函数返回的是一个空列表。

这是代码:

 with gzip.open(gzfile) as fhand:
        line = [line.split(b' ') for line in fhand]
        neutrum = [word for word in line if b'/NN|NEU' in word]

因此,基本上我希望将包含'/ NN | NEU'的单词放入中性词,但是就像我说的那样,该函数将返回中性词保持为空。

当我使用以下代码时,该功能按预期运行:

neutrum = []
for line in fhand:
    line = line.split(b' ')
    for word in line:
        if b'/NN|NEU' in word:
            neutrum.append(word)

1 个答案:

答案 0 :(得分:4)

虽然您的两个列表理解中有两个for循环,但是这两个循环正在重复相同的事情-文件中的行(以字符串形式,然后以列表形式)。因此,您只需要迭代行并检查该指示中性的字符串是否在中,而不是在该行中的 word 中。

相反,请在列表理解中使用两个for循环来模拟嵌套循环:

lines = [line.split(b' ') for line in fhand] # all the lines, not a single line
neutrum = [word for line in lines  # <-- this loop was missing
                for word in line
                if b'/NN|NEU' in word]

或者,在单个列表理解中(可能也可以一行,如果您愿意的话),可能更简洁一些:

neutrum = [word for line in fhand
                for word in line.split(b' ')
                if b'/NN|NEU' in word]