2015-07-20 2 views
0

Моя функция проверяет, сколько дубликатов содержит первый элемент списка в этом списке.Неверное значение, возвращаемое при подсчете количества повторяющихся элементов в списке

def duplicate(lst): 
count=0 
length = len(lst) 

    for i in range(1,length): 
     if lst[0]== lst[i]: 
      count+=1 
      print [(lst[i]),count] 

Например:

duplicate(["hello", "hello","hello", "yes", "no"])=>['hello',2] 

Вышеприведенные отлично работает, однако сказать, что я просто хочу, чтобы сохранить значение для «подсчета», и я настроить свой код на следующее значение 1 всегда возвращается для «подсчета» вместо правильного «подсчета» 2, используя предыдущий пример:

def duplicate(lst): 
count=0 
length = len(lst) 

for i in range(1,length): 
    if lst[0]== lst[i]:    
     count+=1 
     return count 

Я знаю, есть более простой подход к выполнению этого, используя набор(), но я хочу знать, где я «Неправильно в моей петле» при накоплении значений для переменной «count».

+0

Посмотрите на [этот пример] (http://stackoverflow.com/questions/15735406/converting-word-frequency-to-a-graphical-histogram-in-python) о преобразовании частоты слова в гистограмму. Кажется, что процесс создания гистограммы слов очень похож на процесс подсчета дубликатов в списке, но я не уверен, насколько это будет уместно для того, что вы делаете. – Matt

ответ

2

Вы возвращаете значение из цикла. Вам нужно указать оператор return. Ваш цикл выполняется только один раз.

+0

Я сделал это так, чтобы возвращался в строку с «if», однако он все равно возвращает только 1. @patrick – mista619

+0

@ mista619 вам нужно выделить другой уровень. Он должен быть на уровне 'for'. Вы только вывели его из инструкции 'if'. Вы должны полностью вывести его из петли. – River

+0

@River спасибо. – mista619

Смежные вопросы