当x在列表中时,“ValueError:list.remove(x):x不在列表中”

2024-04-19 05:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试过许多可能的解决办法,但没有一个奏效。我的代码是一个简单的单词计数器,它计算歌词中单词的频率。因为短单词不应该被计算在内,所以我写了这段代码。我的单词和它们的计数表是这样的

 goodwords=["a", "my", "the", "I", "long", "up", "on"] 
 count=[26, 16, 16, 15, 12, 11, 11 ]

所以我写了这个代码来过滤掉短单词

for word in goodwords:
if len(word)<3:
        goodwords.index(word)
        count.remove(goodwords.index(word))
        goodwords.remove(word)

        

Python向我抛出以下错误:

ValueError: list.remove(x): x not in list

即使我尝试将单词的索引指定给int,也会显示相同的错误


Tags: 代码inindexcount错误计数器歌词单词
2条回答

如果修改正在循环的列表,则可能会影响循环。 请尝试使用正确的值创建一个新列表

for word in allwords:
if len(word)>3:
        goodwords.append(word)

在遍历列表时,不应修改列表。当您删除某些内容时,索引正在更改。简化任务

我会将字数存储在字典中:

goodwords = ["a", "my", "the", "I", "long", "up", "on"]
count = [26, 16, 16, 15, 12, 11, 11 ]
wordcounts = dict(zip(goodwords, count))

要仅包含较长的单词,请过滤它们:

wordcounts = {word: c for word, c in wordcounts.items()
              if len(word) > 3}

顺便说一句,您可以使用内置的^{}完成作业的第一部分:

>>> wordcounts = collections.Counter("one word and one more word".split())
>>> wordcounts
Counter({'one': 2, 'word': 2, 'and': 1, 'more': 1})

相关问题 更多 >