Понимание списка возвращает пустой список - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь написать функцию, которая просматривает файл для слов с определенным тегом, а затем помещает эти слова в список, используя понимание списка.Однако вместо этого моя функция возвращает пустой список.

Это код:

 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 Ответ

4 голосов
/ 13 мая 2019

Хотя в ваших двух списках есть два цикла for, эти два цикла повторяют одни и те же вещи - строки в файле (сначала как строки, а затем как списки).Таким образом, вы просто перебираете строки и проверяете, находится ли эта строка, указывающая нейтрум, в строке , а не в слове в строке.

Вместо этого используйте два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]
...