在 for 循环中更改时未重新分配变量

Variable not reassigned when changed in for loop

此代码的目标是统计给定列表中出现次数最多的单词。我计划通过遍历字典来做到这一点。如果一个词出现的次数多于存储在变量 rep_num 中的值,它会被重新分配。当前,变量 rep_num 保持为 0,并且不会重新分配给单词在列表中出现的次数。我相信这与尝试在 for 循环中重新分配它有关,但我不确定如何解决这个问题。

def rep_words(novel_list):
    rep_num=0
    for i in range(len(novel_list)):
        if novel_list.count(i)>rep_num:
            rep_num=novel_list.count(i)
    return rep_num
novel_list =['this','is','the','story','in','which','the','hero','was','guilty']

在给定的代码中,应该返回 2,但返回了 0。

你的函数有错误(你计算的是索引,而不是值),这样写:

def rep_words(novel_list):
    rep_num=0
    for i in novel_list:
        if novel_list.count(i)>rep_num:  #you want to count the value, not the index
            rep_num=novel_list.count(i)
    return rep_num

或者你也可以试试这个:

def rep_words(novel_list):
    rep_num=0
    for i in range(len(novel_list)):
        if novel_list.count(novel_list[i])>rep_num:
            rep_num=novel_list.count(novel_list[i])
    return rep_num

在您的 for 循环中,您迭代的是数字而不是列表元素本身,

def rep_words(novel_list):
    rep_num=0
    for i in novel_list:
        if novel_list.count(i)>rep_num:
            rep_num=novel_list.count(i)
    return rep_num

您正在遍历一个数值范围,并且 count 整数 i,none 的值完全存在于列表中。试试这个,returns 最大频率,以及可选的出现次数的单词列表。

novel_list =['this','is','the','story','in','which','the','hero','was','guilty']

def rep_words(novel_list, include_words=False):
    counts = {word:novel_list.count(word) for word in set(novel_list)}
    rep = max(counts.values())
    word = [k for k,v in counts.items() if v == rep]
    return (rep, word) if include_words else rep

>>> rep_words(novel_list)
2
>>> rep_words(novel_list, True)
(2, ['the'])
>>> rep_words('this list of words has many words in this list of words and in this list of words is this'.split(' '), True)
(4, ['words', 'this'])