Написать программу для работы со списками
Элементы списка вводить с помощью генератора случайный чисел.В одномерном списке A=(a1, а2, ..., аn) группу, содержащую наибольшее число подряд идущих положительных элементов, переписать в хвост списка
y =[]
x = 0
q =[]
q1=[]
import random
for i in range (15):
y.append (random.randint (-20, 50))
print (y)
while x < len(y) and y[x]>0:
q.append(int(y[x]))
x +=1
z=len(q)
print(z)
print(q)
Я сделал генератор для заполнения списка и заполнение списка положительными элементами, когда все положительные списки будут готовы, я хочу просто сравнить их по длине и наибольший переместить в хвост. Но как начать проверять по индексу элемент после первого отрицательного числа, ведь индекс последнего положительного числа остается в цикле while?
Ответы (1 шт):
Поскольку нужно найти не любую, а самую длинную серию - придётся обходить весь список циклом for.
Внутри него можно запоминать индекс начала серии положительных, и когда серия кончается - найти её длину и сравнить с максимальной, запомнить индексы, если она самая длинная
После окончания цикла собрать новый список из трёх срезов.
import random
A = []
for i in range (15):
A.append (random.randint (-20, 50))
print (A)
maxlen = 0
maxstart = -1
start = -1
positive = False
for i in range(len(A)+1):
if positive:
if i == len(A) or A[i] <= 0:
if i - start > maxlen:
maxlen = i - start
maxstart = start
positive = False
else:
if not positive:
start = i
positive = True
B = A[0:maxstart] + A[maxstart + maxlen:] + A[maxstart:maxstart + maxlen]
print(maxstart, maxlen)
print(B)
[-19, -13, 15, -6, 30, 4, -15, 36, 50, -2, 27, 26, -14, 23, -8]
4 2
[-19, -13, 15, -6, -15, 36, 50, -2, 27, 26, -14, 23, -8, 30, 4]