Заполните массив из 30 элементов случайными числами на отрезке [10; 12] и найдите самую длинную последовательность стоящих рядом одинаковых элементов
Заполните массив из 30 элементов случайными числами на отрезке [10; 12] и найдите самую длинную последовательность стоящих рядом одинаковых элементов. Если таких последовательностей несколько выведите последнюю из них.
Например, для массива из 10 элементов, имеющих значения 10, 10, 11, 10, 12, 12, 11, 12, 11, 10 программа должна вывести 12, 12.
from random import randint
arr = [randint(10,12) for i in range(30)]
lst = []
n = 1
for i,x in enumerate(arr[:-1]):
if x == arr[i+1]:
n +=1
else:
lst.append(( x,n ))
n = 1
max_el = max( lst, key=lambda x: x[1] )
print('массив : ',arr)
print("число : {} {}".format( max_el[0], max_el[1] ))
Ответы (2 шт):
Автор решения: Danis
→ Ссылка
from random import randint
arr = [randint(10,12) for i in range(30)]
lst = []
n = 1
for i,x in enumerate(arr[:-1]):
if x == arr[i+1]:
n +=1
else:
lst.append(( x,n ))
n = 1
max_el = max( lst, key=lambda x: x[1] )
print('массив : ',arr)
print("число:", *[max_el[0]] * max_el[1])
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
from random import randint
arr = [randint(10, 12) for i in range(30)]
lst = []
n = 1
for i,x in enumerate(arr[:-1]):
if x == arr[i+1]:
n +=1
else:
lst.append(( x,n ))
n = 1
max_el = max( lst, key=lambda x: x[1] )
print('массив arr: \n', arr)
print("\nчисло: {}; {} - раз/а".format( max_el[0], max_el[1] ))
_f = '{} ' * max_el[1]
ind_lst = lst.index(( max_el[0], max_el[1] ))
ind_1_item = sum([ i for v, i in lst[0:ind_lst] ])
_sliz = arr[ind_1_item : ind_1_item+max_el[1]]
print("\nсамая длинная последовательность: {}".format(_f).format(*_sliz))