嵌套列表对象不支持索引

2024-05-29 04:10:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套列表,名为env,在构造函数中创建,另一个方法用于填充网格元素,定义如下:

class Environment(object):
    def __init__(self,rowCount,columnCount):
        env = [[ None for i in range(columnCount)] for j in range(rowCount) ] 
        return env       

    def addElement(self, row, column):
        self[row][column] = 0

在后面的代码中,我通过运行以下命令创建环境的实例:

^{pr2}$

然后我想通过运行以下命令向环境添加元素:

myEnv.addElement(2,2)

所以我期望的是我会收到一个新的环境对象,它是一个6x6网格,网格的2,2位置有一个0。但那没用。在

我有两个错误:

  1. 我无法从init方法返回除None之外的任何内容。在
  2. 当尝试执行addElement(2, 2)时,我们遇到的主要问题是:

    "TypeError: 'Environment' object does not support indexing.

我查看了__getitem____setitem__方法,但无法让它们在多维列表中工作。有没有更好的数据结构可以用来创建网格?在


Tags: 方法selfenvnone网格元素列表object
1条回答
网友
1楼 · 发布于 2024-05-29 04:10:34

这里的问题是不能用__init__替换对象。您可以将list子类化,并在__new__中执行某些操作,但这将是一个巨大的过度杀戮,更好的选择是包装列表:

class Environment(object):
    def __init__(self, rows, columns):
        self.env = [[None for column in range(columns)] for row in range(rows) ] 

    def addElement(self, row, column):
        self.env[row][column] = 0

请注意,您声称调用myEnv = createEnvironment(6,6)-使用函数而不是构造函数有点奇怪。在

如果您真的希望对象的行为类似于列表,那么您当然可以提供一些额外的包装函数,比如__getitem__/__setitem__。E、 g组:

^{pr2}$

例如,它允许您执行some_environment[5, 6]。(您可能宁愿返回该列,这取决于您的系统和什么最适合您)。在

相关问题 更多 >

    热门问题