python - 在 Python 2.7 中处理超出范围的列表索引

标签 python list python-2.7 error-handling

我有一个 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/

相关文章:

c++ - 使用迭代器从 STL 列表中删除 C++ 结构

python - 打印字符串中字符的 unicode 数量(Python)

Django 管理日志条目 : how it works in non admin actions?

python - MySQL python 查询从列中提取数据

java - 用 Arrays.asList 初始化 List<>

java - 两次检查列表中的字符串是否包含来自不同列表的字符串的一部分,并在处理列表后返回唯一列表

python - 查找给定节点的最高权重边

python - 这个 Python 请求错误是什么意思?

python - 读取csv文件时如何以时间升序方式获取最近一天的行?

Python:如何使用逻辑算法评估代数表达式?