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

0
Maxwell Gyimah 28 Июн 2019 в 19:06

3 ответа

Лучший ответ

В цикле 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
Vaibhav Sharma 28 Июн 2019 в 16:09

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

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
0
Taohidul Islam 28 Июн 2019 в 16:09

Вы перебираете числовой диапазон и 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'])
1
David Zemens 28 Июн 2019 в 16:28