Следующая функция помещена в цикл for, где из-за индексов цикла for могут быть получены большие отрицательные значения, как в следующем примере:
C_ki[2][1] = max (C_ki[1][1], C_ki[3][-7] , C_ki[2][0])
# C_ki is defined as:
C_ki = [[0]*(7) for x in range(3)]
C_ik = [[0]*(3) for x in range(7)]
Для вычисления вышеуказанного C_ki[2][1] python выдает индекс списка ошибок за пределами допустимого диапазона из-за отрицательного индекса.
Есть ли способ установить C_ki[3][-7] равным нулю для отрицательных индексов или не учитывать его для функции max?
max() — это функция, вам нужно поместить свой набор в круглые скобки, например: max({C_ki[1][1], C_ki[3][-7] , C_ki[2][0]})Но почему вы не можете просто... заменить -7 на 0? Вам нужно заменить его при определенном условии, например, если он существует?
Существует формула, которая должна приниматься во внимание, что иногда дает отрицательные значения.






Итак, если i ваш (возможно) отрицательный индекс, вы можете просто сделать что-то вроде этого
C_ki[2][1] = max (C_ki[1][1], C_ki[3][max(i,0)] , C_ki[2][0])
Если, как я подозреваю, вы хотите, чтобы значение всего элемента было равно нулю, вы можете использовать условный оператор
C_ki[2][1] = max (C_ki[1][1], 0 if i <0 else C_ki[3][i] , C_ki[2][0])
Если вы хотите поставить индекс -7, только если он существует, а в противном случае показатель0, вы можете использовать тернарный оператор:
C_ki[2][1] = max(C_ki[1][1], C_ki[3][-7 if len(C_ki[3]) >= 7 else 0] , C_ki[2][0])
Элиф вы хотите поставить индекс -7 только если он существует, а иначе стоимость0 :
C_ki[2][1] = max(C_ki[1][1], C_ki[3][-7] if len(C_ki[3]) >= 7 else 0, C_ki[2][0])
Подробнее о тернарном операторе
Я считаю, что OP хочет установить все значение C_ki[3][-7] в 0, если индекс не существует
Отредактировано с учетом обеих возможностей!
Примечание: вы получаете ошибку индекса, потому что индекс списка выходит за пределы допустимого диапазона (C_ki[3][-7])
ваши C_ki имеют размерность [3][7] с началом отсчета индекса от 0 до 2. 3 выходит за пределы допустимого диапазона.
ПРИМЕЧАНИЕ: что происходит с отрицательными индексами:
пример:
array = [0,1,2,3,4,5]
print (array[-1]) # equal array[5]
результат: 5
Вы можете обернуть извлечение в функцию,
def get_or_zero(array, i, j):
try:
return array[i][j]
except IndexError:
return 0
тогда вы можете использовать get_or_zero(C_ki, i, j) вместо C_ki[i][j] в функции max.
вы пробовали, например: get_or_zero(C_ki,1,-4)? если индекс отрицательный, его индексация обратная, он не выдаст ошибку, если индекс находится в диапазоне @vlizan
В 9 случаях из десяти лучше решить проблему с помощью индексов, но, если предположить, что это 10-й раз, встроенные функции минимума и максимума можно комбинировать, чтобы дать вам ту защиту, которую вы ищете:
# legal value, no change required
I= 2
D=(min(max(I,0),4))
# D will equal 2
# large negative set to zero
I= -7
D=(min(max(I,0),4))
# D will zero 0
# large positive set to the value of the maximum of 4
I= 7
D=(min(max(I,0),4))
# D will equal 4
Вы не можете сделать
len(3)в питоне. Кроме того, в этом случае нельзя использовать фигурные скобки. Вы должны использовать эти()или[].