Почему поиск элементов с четным индексом игнорирует элемент с индексом 16?
Программа должна суммировать элементы с четным индексом и умножать на последний элемент. По какой-то причине эта программа при поиске элементов с четным индексом игнорирует элемент с индексом 16.
def check(array: list) -> int:
if len(array) == 0:
print(0)
else:
c=0
for k in array[::]:
if (array.index(k) % 2) == 0:
c= k + c
print(k,c)
x = c * array[-1]
print(x)
return 0
check([-37,-36,-19,-99,29,20,3,-7,-64,84,36,62,26,-76,55,-24,84,49,-65,41])
Ответы (3 шт):
Дело в том, что array.index(k) возвращает индекс первого встреченного k. А для значения 84 этот индекс равен 9... как то так. В данном случае правильно делать цикл по индексам через генератор.
for idx in range(0, len(array), 2): # сразу берём только чётные индексы
c = c + array[idx]
Цикл с проверкой индекса нужно делать через enumerate - это самый понятный, простой и правильный способ:
for i,k in enumerate(array):
if i % 2 == 0:
c += k
print(k,c)
Использовать же .index неправильно, если элементы в списке повторяются - так будет выдан индекс только первого из повторений элемента в списке.
Простая проверка:
for k in array:
print(array.index(k),k)
Вывод:
0 -37
1 -36
2 -19
3 -99
4 29
5 20
6 3
7 -7
8 -64
9 84 <-- 84 встретилось в первый раз
10 36
11 62
12 26
13 -76
14 55
15 -24
9 84 <-- индекс указывает на первое 84
17 49
18 -65
19 41
P.S. Так то сама задача решается гораздо проще:
arr = [-37,-36,-19,-99,29,20,3,-7,-64,84,36,62,26,-76,55,-24,84,49,-65,41]
print(sum(arr[::2])*arr[-1])
# 1968