我正在尝试编写一个函数,该函数遍历文件中具有特定标签的单词,然后通过使用列表理解将这些单词放入列表中。但是,我的函数返回的是一个空列表。
这是代码:
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)
答案 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]