Как написать программу, которая показывает мне элемент, который появляется больше всего бок о бок?
Пример:
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)
Это: hastebin.com/gojegocobe.py
Что значит «большинство бок о бок»? Одной партией? Что является наиболее "бок о бок" в 1 1 1 2 2 2 2 1 1 1?
@tobias_k 4 2s конечно
Если вам нужно что-то без каких-либо библиотек, вы можете добиться этого с помощью простого цикла и некоторых счетных переменных. Что-то вроде это. Вероятно, просто проще использовать groupby или Counter, как показано ниже.






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.
Не могли бы вы показать, что вы пробовали на данный момент?