Переменная не переназначается при изменении цикла for - PullRequest
0 голосов
/ 28 июня 2019

Цель этого кода - подсчитать слово, которое больше всего встречается в данном списке.Я планировал сделать это, просматривая словарь.Если слово появлялось большее количество раз, чем значение, хранящееся в переменной 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вернулся вместо.

Ответы [ 3 ]

1 голос
/ 28 июня 2019

В цикле 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
1 голос
/ 28 июня 2019

Вы перебираете числовой диапазон и count целое число i, ни одно из которых не существует в списке вообще. Попробуйте это вместо этого, который возвращает максимальную частоту и, необязательно, список слов, которые встречаются столько раз.

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'])
0 голосов
/ 28 июня 2019

В вашей функции есть ошибка (вы считаете индекс, а не значение), напишите так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...