2014-01-10 4 views
1

Я новичок в python и нуждаюсь в помощи в поиске режима кортежа. Тем не менее, код я прямо сейчас отображает только один режим, то, что мне нужно изменить, чтобы отобразить несколько режимов (если список номеров имеет более чем 1)Поиск нескольких режимов в списке кортежей - python

import itertools 
    import operator 

    def mode_function2(lst): 
     return max(set(lst), key=lst.count) 
+1

Что бы вы хотели, чтобы 'lst = [1,1,2,2]' вернуться? '[1,2]' или '[1,1,2,2]'? (Я принимаю первый.) IOW, вас больше интересует идентичность режимов или вам нужна их мулиптичность? – DSM

+0

Извините, «1st» не является хорошим именем переменной для использования. У меня на самом деле есть другой кортеж, в котором много цифр, и я просто хочу узнать, какое число (-ы) больше всего встречается в кортеже, поэтому я думаю, что личность. Сейчас это приносит мне только один номер, когда возможно может быть больше. – user3178292

ответ

3

Это работает:

from collections import Counter 
def mode_function2(lst): 
    counter = Counter(lst) 
    _,val = counter.most_common(1)[0] 
    return [x for x,y in counter.items() if y == val] 

Ниже демонстрация:

>>> mode_function2([1, 2, 2]) 
[2] 
>>> mode_function2([1, 2, 2, 1]) 
[1, 2] 
>>> mode_function2([1, 2, 3]) 
[1, 2, 3] 
>>> 

важные понятия здесь:

+0

Спасибо soo muchhh man !! Он работает безупречно. – user3178292

1

Является ли это то, что вы хотите?

def mode_function2(lst, multiplicity = False): 
    maxFreq = max(map(lst.count, lst)) 
    modes = [i for i in lst if lst.count(i) == maxFreq] 
    return modes if multiplicity else set(modes) 
+0

no thats не работает для меня – user3178292

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

  • Нет связанных вопросов^_^