Установить отрицательные индексы в списке равными нулю

Следующая функция помещена в цикл 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?

Вы не можете сделать len(3) в питоне. Кроме того, в этом случае нельзя использовать фигурные скобки. Вы должны использовать эти () или [].

Vlad 13.03.2019 12:58
max() — это функция, вам нужно поместить свой набор в круглые скобки, например: max({C_ki[1][1], C_ki[3][-7] , C_ki[2][0]})
Fukiyel 13.03.2019 13:00

Но почему вы не можете просто... заменить -7 на 0? Вам нужно заменить его при определенном условии, например, если он существует?

Fukiyel 13.03.2019 13:04

Существует формула, которая должна приниматься во внимание, что иногда дает отрицательные значения.

Stijn 13.03.2019 13:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
750
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Итак, если 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, если индекс не существует

CAPSLOCK 13.03.2019 13:15

Отредактировано с учетом обеих возможностей!

Fukiyel 13.03.2019 13:17

Примечание: вы получаете ошибку индекса, потому что индекс списка выходит за пределы допустимого диапазона (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

ncica 13.03.2019 13:46

В 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

Другие вопросы по теме