繁体   English   中英

在Python 2.7中处理范围外列表索引

[英]Handling out of range list index in Python 2.7

我在Python 2.7中有一个列表列表,就像下面显示的那样

rr =[[10 for row in range(5)] for col in range(5)]

现在,在我的算法中,我需要找到给定列表元素的邻居,我使用以下方法检查邻居

b = [rr[rn][cn+1],rr[rn-1][cn+1],rr[rn-1][cn],rr[rn-1][cn-1],rr[rn][cn-1],rr[rn+1][cn-1],rr[rn+1][cn],rr[rn+1][cn+1]]

我想将0分配给给定矩阵(或列表)的边界之外的相邻元素

其中rn是行索引,而cn是我要检查的列表单元格的列索引。 上面给出了,如果我的代码检查任何角单元格,该怎么办? 例如说索引为[0,0]的第一行和第一列单元格元素,某些邻居索引将为负数。 我的代码有一个特殊的属性,它阻止我向上述列表中添加其他行或列。

怎么处理呢? 任何帮助...

要解决绑定问题和rr[i,j]语法,可以在类中重载getitem方法:

class boundedlist(list):
    def __getitem__(self,indices):
        try: 
            l=list(self)
            for i in indices : l=l[i]
            return l
        except IndexError:
            return 0 

然后,所有工作如您所愿:

In [76]: brr=boundedlist(rr)

In [77]: brr[4,3]
Out[77]: 10

In [78]: brr[4,6]
Out[78]: 0

In [79]: brr[-1,6]
Out[79]: 0

In [80]: brr[10,4]
Out[80]: 0

您可以像这样保留行访问权限:

In [81]: brr[[4]]
Out[81]: [10, 10, 10, 10, 10]

您可以将其推广到更多维度。 如果要修改数据,则必须修改__setitem__

如果要访问rr列表中的cell(1,1) ,则必须使用rr[1][1]

for i in range(len(rr)):
    for j in range(len(rr[i])):
        if (i, j) in [(rn, cn+1), (rn-1,cn+1 ), (rn-1, cn ), (rn-1, cn-1 ), (rn, cn-1 ), (rn+1, cn-1 ), (rn+1, cn ), (rn+1, cn+1)]:
            #Do some things
        else:
            #Do other things

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM