Вывести преобладающее число из списка 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( 'Не успел решить, уже дали правильный ответ )))))' )