Вывести преобладающее число из списка python

Как вывести преобладающее число из списка в python?

Например, у меня есть список = [1, 7, 2, 2, 5, 7, 7, 0]

Ответ 7.

Если ни одно число не преобладает (количество каждого числа одинаковое), вывести -1. Если есть несколько чисел с одним числом повтора, выбрать наименьший. Числа в списке положительные.


Ответы (2 шт):

Автор решения: Zhihar

например можно решить так

from collections import Counter

data = [1, 7, 2, 2, 5, 7, 7, 0,]

counts = Counter(data)

counts_min = (-1, len(data))
counts_max = (-1, 0)

for i in counts:
    counts_min = (i, counts[i]) if counts[i] < counts_min[1] else counts_min
    counts_max = (i, counts[i]) if counts[i] > counts_max[1] else counts_max

print(-1 if counts_min[1] == counts_max[1] else counts_max[0])

можно не использовать Counter, тогда надо самому сформировать словарь:

data = [1, 7, 2, 2, 5, 7, 7, 0,]

counts = dict()

for i in data:
    counts[i] = counts.get(i, 0) + 1

for i in counts:
    counts_min = (i, counts[i]) if counts[i] < counts_min[1] else counts_min
    counts_max = (i, counts[i]) if counts[i] > counts_max[1] else counts_max

print(-1 if counts_min[1] == counts_max[1] else counts_max[0])

Вот более короткий код (в одну строку)

data = [1, 7, 2, 2, 5, 7, 7, 0,]

counts = dict()

for i in data:
    counts[i] = counts.get(i, 0) + 1

res = sorted(counts.items(), key=lambda obj: obj[1])

print(-1 if res[0][1] == res[-1][1] else res[-1][0])

или с использование Counter:

from collections import Counter

data = [1, 7, 2, 2, 5, 7, 7, 0,]

res = sorted(Counter(data).items(), key=lambda obj: obj[1])

print(-1 if res[0][1] == res[-1][1] else res[-1][0])
→ Ссылка
Автор решения: alex

Попробуйте так:

aa = [ 1, 7, 2, 2, 2, 5, 7, 7, 0 ]
# aa = [ 1, 7, 2, 2, 5, 7, 7, 0 ]
# aa = [ 1, 7, 2, 5, 0 ]  # Количество каждого числа одинаковое
bb = []
cc = []
aa.sort() 
while len( aa ) > 0 :
    n = aa[ -1 ]
    cn = aa.count( n )
    bb.append( cn )
    cc.append( n )
    l = len( aa )
    aa = aa[ 0 : l - cn ]
maxbb = max( bb )
minbb = min( bb )
if minbb == maxbb : # Количество каждого числа одинаковое
    print( -1 )
elif bb.count( maxbb ) == 1 : # Одно число преобладает
    i = bb.index( maxbb ) 
    print( cc[i] )
elif bb.count( maxbb ) > 1 : # Есть несколько чисел с одним числом повтора
    print( 'Не успел решить, уже дали правильный ответ )))))' ) 
→ Ссылка