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

时间:2019-03-13 11:53:26

标签: python indexing indices

下面的函数放置在for循环中,由于for循环索引可以使负值较高,如以下示例所示:

$ hg pull $(hg root)/.hg/strip-backup/e1634a4bde50-backup.hg

为了计算上述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)] ,由于给出了负索引,python给出了错误列表索引超出范围的信息。 是否有一种方法可以将C_ki[2][1]的负索引设置为零,或者不考虑max函数?

5 个答案:

答案 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 :(得分:1)

如果您只想放置索引-7,否则要放置 index 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])

More on the ternary operator

答案 2 :(得分: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 :(得分: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

答案 4 :(得分:0)

十分之九最好用索引解决问题,但假设这是第十次,则可以将内置的最小,最大功能组合在一起,从而为您提供所需的保护:

# 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