Цель состояла в том, чтобы выполнить поиск по данному списку и напечатать наибольшее значение, но оно просто выдает ошибку индекса списка вне диапазона.
a = [1, 2, 3 ,42 ,51,12,76,22]
max = a[0]
for i in range(0, len(a)):
for j in range(1, len(a) + 1):
if a[j] > a[i]:
max = a[j]
print(max)
Ошибка во внутреннем цикле: for j in range(1, len(a) +1):
Удалите его, чтобы удалить ошибку:
a = [1, 2, 3, 42, 51, 12, 76, 22]
max = a[0]
for i in range(0, len(a)):
for j in range(1, len(a) ):
if a[j] > a[i]:
max = a[j]
print(max)
# 76
Результаты:
Функция, которую вы определили не работает, потому что вы сравниваете каждый элемент друг с другом. Вам нужно сравнить их с текущим значением max
.
Пример не работает:
a = [76 ,1, 2, 3, 42, 51, 12, 22 ]
max_ = a[0]
for i in range(0, len(a)):
for j in range(0, len(a) ):
if a[j] > a[i]:
max_ = a[j]
print(max_)
# 51
Вот простое рабочее решение:
a = [76 ,1, 2, 3, 422, 51, 12, 22,99 ]
# Init max
max_ = a[0]
for elt in a[1:]:
if elt > max_:
max_ = elt
print(max_)
# 422
И если вы хотите проверить свои результаты:
print(max(a))
# 422
Ваш внутренний цикл заканчивается слишком поздно. Но вложенные циклы вообще не нужны. Достаточным шаблоном будет:
mx = a[0] # do not shadow built-in function
for i in range(1, len(a)):
if a[i] > mx:
mx = a[i]
print(mx)
Есть ли конкретная причина, по которой вы используете цикл для этой проблемы? Самый быстрый способ получить результат — использовать функцию max
.
Вот так:
a = [1, 2, 3 ,42 ,51,12,76,22]
print(max(a))
Просто выясняю, как работают вложенные циклы. Это все.