Python str.islower()方法似乎在我的代码中不起作用?

时间:2018-12-16 05:03:44

标签: python python-requests lowercase

我正在通过Project Gutenberg网站分析Macbeth的文本,并且尝试通过提及字符的名称来创建字符列表。我知道可以使用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 :(得分:1)

在for循环中从列表中删除一项,列表也已更改。因此,在此for string in sublist中,字符串不会按照原始子列表的顺序循环。