首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python创建类的2d数组

用Python创建类的2d数组
EN

Stack Overflow用户
提问于 2013-11-14 09:29:25
回答 1查看 6.4K关注 0票数 0

作为大学练习的一部分,我们正在通过Python学习入门编程语言。我已经知道如何编程到一个合理的标准,所以我已经被告知,如果我能提出一些好的品质,我可以略过一些课程。

在这个程度上,我采用了文本游戏“星际迷航”(http://www.dunnington.u-net.com/public/startrek/startrek.c)的C版本,并用Python重写了它,当我习惯了Python的具体需求时,它就足够好了。

我的问题似乎是Stackoverflow上常见的问题,即创建和使用可用的多维数组。经过大量的搜索,我已经掌握了创建多维整数或字符串列表等的窍门,但是当涉及到类的多维数组(确切地说是列表列表)时,所有的东西都会散开。

这是我的班级:

代码语言:javascript
复制
class quadrant:
    klingonCount = 0
    baseHere = 0
    starCount = 0

下面是创建类列表的许多尝试之一:

代码语言:javascript
复制
quadrants = [quadrant] * 9
for y1 in range(1,9):
    quadrants[y1] = [quadrant] * 9

这是从http://docs.python.org/2/faq/programming#how-do-i-create-a-multidimensional-list复制的

当我将一个类替换为0时,打印数组显示整个数组引用的是一个类,而不是我所希望的许多不同的类。

问题是数组只保存在循环的最后一次迭代中输入的值,而不是单个的值。

我对类的使用并不十分熟悉,所以我可能只是尝试多次引用一个类,实际上我需要很多类。我有吗?帮助!

我正在使用Python2.7,这是推荐的语言。

为了参考起见,这是试图填充多维列表的代码:

代码语言:javascript
复制
for x in range(1,9):
    for y in range(1,9):

        j = randint(1,99)
        if (j < 5):
            numBases += 1
            baseHere = 1

        temp = getKlingons(difficulty)

        klingonsHere += temp

        quadrants[x][y].baseHere = baseHere
        quadrants[x][y].klingonCount = temp
        s = randint(1,9)
        quadrants[x][y].starCount = s
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-14 09:43:10

问题来自于这样一个事实,即您创建的类具有类属性,而不是实例属性。稍后,在迭代期间,您将创建与类属性无关的实例属性。这没什么意义。

你的班级应该是这样的:

代码语言:javascript
复制
class Quadrant(object):
    def __init__(self):
        self.klingonCount = 0
        self.baseHere = 0
        self.starCount = 0

您可以创建这样的数组:

代码语言:javascript
复制
quadrants = [[Quadrant() for i in range(8)] for j in range(8)]

在解决方案中,一行中的所有列表都包含相同的对象。因此,在每次迭代中,您都要修改相同的3个属性。

还请注意,列表具有基于0的索引,因此您应该像这样进行迭代:

代码语言:javascript
复制
for x in range(9):
    for y in range(9):
        #...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19973941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档