我有一个 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__
如果要修改数据。
关于python - 在 Python 2.7 中处理超出范围的列表索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35600580/