Это:
for num in num_list:
if not (num_list[num + 1] - num_list[num] == delta):
return False
почти наверняка не делает то, что вы думаете, что делает.Когда вы определяете for num in num_list:
, это означает, что num
является элементом из списка num_list
.num
НЕ является индексом.Таким образом, если ваш список [2, 4, 6, 8, 10]
, вы выходите за пределы, когда num
равен 4
(т.е. второй элемент в вашем списке), потому что ваш входной список имеет длину только 5 и вы пытаетесь получить доступ к индексу num+1
5
(индексы основаны на 0, поэтому 5
выходит за границы)
Вы, вероятно, хотите что-то вроде этого:
# Start at index 1, or you'll always return false since delta == index1 - index0
for index in range(1, len(num_list)-1):
if not (num_list[num + 1] - num_list[num] == delta):
return False
или более питонический (обратите внимание, тамнет индексов):
# Again start at index1, zip will handle the edge case of ending nicely so we don't go OB
for num, next_num in zip(num_list[1:], num_list[2:]):
if not (next_num - num == delta):
return False