Показать число, которое встречается чаще всего подряд

Как написать программу, которая показывает мне элемент, который появляется больше всего бок о бок?

Пример:

6 1 6 4 4 4 6 6

Я хочу четыре, а не шесть, потому что вместе всего две шестерки.

Вот что я пробовал (из комментариев):

c = int(input())
h = [] 
for c in range(c):
    h.append(int(input()))
final = []
n = 0    
for x in range(c-1):
    c = x
    if h[x] == h[x+1]:
        n+=1
        while h[x] != h[c]:
            n+=1
        final.append([h[c],n])
print(final)        

Не могли бы вы показать, что вы пробовали на данный момент?

skjoshi 29.05.2018 13:05

Это: hastebin.com/gojegocobe.py

Yacine Alloul 29.05.2018 13:19

Что значит «большинство бок о бок»? Одной партией? Что является наиболее "бок о бок" в 1 1 1 2 2 2 2 1 1 1?

tobias_k 29.05.2018 13:28

@tobias_k 4 2s конечно

Nick 29.05.2018 13:30

Если вам нужно что-то без каких-либо библиотек, вы можете добиться этого с помощью простого цикла и некоторых счетных переменных. Что-то вроде это. Вероятно, просто проще использовать groupby или Counter, как показано ниже.

RoadRunner 29.05.2018 14:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
49
2

Ответы 2

 maxcount=0; //store maximum number item side by side
num=-1; //store element with max count 
 for i=0 to n //loop through your array
        count=0; 
        in=i;
        while(arr[in++]==arr[i]){//count number of side by side same element
           count++;
        }
        maxcount=max(maxcount,count);
        num= maxcount==count? arr[i]:num;
        i=in-1;
endfor;

Зависит от того, что именно вы хотите для ввода, например

lst = [1, 1, 1, 2, 2, 2, 2, 1, 1, 1]

Если вы считаете четыре 2 наиболее распространенными, потому что это самый длинный непрерывный отрезок одних и тех же элементов, то вы можете groupby с теми же значениями и выбрать тот, у которого есть maxlen:

max((len(list(g)), k) for k, g in itertools.groupby(lst))
# (4, 2)  # meaning 2 appeared 4 times

Если вас интересует элемент, который чаще всего появляется рядом с самим собой, вы можете zip список, чтобы получить пары соседних элементов, отфильтровать те, которые одинаковы, передать их через Counter и получить most_common:

collections.Counter((x,y) for (x,y) in zip(lst, lst[1:]) if x == y).most_common(1)
# [((1, 1), 4)]  # meaning (1,1) appeared 4 times

В вашем примере 6 1 6 4 4 4 6 6 оба вернут 4.

Другие вопросы по теме