Как сделать, чтобы цикл while продолжал работать дальше?
Написал код, который находит самое наибольшее число в списке и вычисляет, сколько раз к другим числам надо добавить единицу, чтобы они сравнялись. В конце выводит количество этих добавленных единиц. Но вот проблема, если в списке есть два/три/четыре и т.д "больших числа", например [1,2,3,1, 1, 3, 1, 1, 3]. То мой код доходит до первой тройки от начала и первой от конца, а то, что в середине - не видит. Понимаю, что мог изначально выбрать неверный путь решения, но очень хотелось бы получить подсказку именно в таком ключе. Заранее спасибо всем отозвавшимся)
def candies(a):
c = len(a)
d = []
e = 0
f = -1
if c<= 1:
print(-1)
else:
b = max(a)
while a[e] < b:
a[e]+=1
d.append(1)
if a[e] == b:
e+=1
while a[f] < b:
a[f]+=1
d.append(1)
if a[f] == b:
f-=1
print(len(d))
candies([1, 2, 3, 1, 2, 3])
Ответы (2 шт):
Если я правильно понял, что надо сделать, то я сделал так.
def candies(a):
e = 0
b = max(a)
for i in range(len(a)):
if len(a) <= 1:
print(-1)
else:
if a[i] < b:
while a[i] != b:
e += 1
a[i] += 1
print(e)
candies([4, 3, 6, 7, 2, 1])
Я старался не сильно менять ваше решение. Счетчик единиц можно ввести как переменную, которая будет изменяться на 1 одновременно с добавлением единицы. Введение отдельного массива визуально нагружает код, ну и сложнее его воспринимать.
Вот мой пример:
my_list = [1, 2, 3, 1, 2, 3]
candies = lambda x: sum([max(x) - num for num in x])
print(candies(my_list))
6
Можно переписать как обычную функцию и определить внутри её максимальный элемент, присвоить его переменной и выиграть еще немного в производительности.