将列表中的负索引设置为零

问题描述 投票:0回答:5

以下函数放在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]设置为负值,或者不考虑最大函数?

python indexing indices
5个回答
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])

3
投票

你可以将提取包装在一个函数中,

def get_or_zero(array, i, j):
    try:
        return array[i][j]
    except IndexError:
        return 0

那么你可以在max函数中使用get_or_zero(C_ki, i, j)而不是C_ki[i][j]


1
投票

如果你只想存在索引-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])

Elif你想只在它存在时放入索引-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])

More on the ternary operator


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


0
投票

十分之九是最好用索引解决问题,但假设这是第10次,内置的min,max函数可以组合起来,为您提供所需的保护:

# 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
© www.soinside.com 2019 - 2024. All rights reserved.