2013-11-22 4 views
1
from collections import Counter 
from collections import defaultdict 

L = [1.0,1.0,2.0,2.0,3.0,4.0,5.1,5.1] 
d = defaultdict(float) 
for i in L: 
    d[i] += 1 
most_frequent = sorted(Counter(L).most_common(), key=lambda x: x[1], reverse=True)[0] 
print(most_frequent) 

выходов: (1,0, 1)Нахождение наиболее часто встречается в списке поплавков

Кода должен выхода «Режим (ы) 1,0, 2,0, 5,1» в этом сценарии. Однако я запускаю программу и получаю только первый режим, и не все режимы включены

Как исправить это?

+0

Особенно' unhashable type "может быть решена с помощью' L' вместо 'c' при переходе в' Counter': '... Counter (L) .most_common(), ...' – khachik

ответ

0

Возможно, что-то вроде этого? Это может быть быстрее, но это довольно читаемым:

#!/usr/local/cpython-3.3/bin/python 

import collections 

list_ = [1.0,1.0,2.0,2.0,3.0,4.0,5.1,5.1] 

frequencies = collections.Counter(list_) 

reverse_dict = collections.defaultdict(list) 
for key, value in frequencies.items(): 
    reverse_dict[value].append(key) 

maximum_count = max(reverse_dict) 

print('Your modes are {}'.format((reverse_dict[maximum_count]),)) 
1

Вы можете просто использовать Counter 'второй аргумент most_common функция в s, как этот

print([num for num, count in Counter(L).most_common(3)]) 

Выход

[1.0, 2.0, 5.1] 
+0

Не будет ли это печатать 3, когда я скажу? Я хочу, чтобы он печатал столько, сколько пользовательские входы. Извините, если бы вы указали, что – Moose

+0

Это также автоматически отображает верхнюю 3, поэтому, если список 3,3,2,1, он будет печатать 3.0, 1.0, 2.0 не только 3.0 – Moose

+0

@Moose Не могли бы вы объяснить вашу проблему четко? – thefourtheye

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