Кажется, что метод Python str.islower () не работает в моем коде? - PullRequest
0 голосов
/ 16 декабря 2018

Я анализирую текст Макбета через веб-сайт Project Gutenberg и пытаюсь составить список персонажей, упомянув их имена.Я знаю, что есть способ сделать это с помощью nltk, но сейчас я пытаюсь избежать этого.Я получаю имена, находя в тексте все экземпляры «Enter», а затем пытаюсь удалить все строчные слова.Вот код, который у меня есть:

import requests

macbeth = requests.get('http://www.gutenberg.org/cache/epub/2264/pg2264.txt').text

macbeth = macbeth.split('.')

character_list = [sentence.split() for sentence in macbeth if 'Enter' in sentence]

for sublist in character_list:
    for string in sublist:
        if string.islower() == True:
            sublist.remove(string)

Вот фрагмент вывода, который я получаю при печати результата:

[['Enter', 'Witches'],
 ['Enter',
  'King,',
  'Malcome,',
  'Donalbaine,',
  'Lenox,',
  'attendants,',
  'a',
  'Captaine'],
 ['Enter', 'Rosse', 'Angus'],
 ['Enter', 'three', 'Witches'],
 ['Enter', 'Macbeth', 'Banquo'],
 ["Toth'", 'tune', 'words:', 'here?', 'Enter', 'Rosse', 'Angus']
 etc.

Мне трудно понять, почему«обслуживающий персонал», «а», «три», «мелодия» и т. д. не удаляются из каждого подсписка.Я что-то упустил в коде, который у меня сейчас есть?

1 Ответ

0 голосов
/ 16 декабря 2018

Вы удаляете один элемент из списка в одном цикле for, список также изменился.Таким образом, в этом for string in sublist строка не будет зацикливаться как порядок исходного подсписка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...