python中的命名坐标

2024-09-30 08:31:12 发布

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

我试图写出一个三维物体的坐标,但我不知道如何列出它。在

到目前为止,我已经:

class threed:
    def __init__(self,length,width,height):
        self.h =height
        self.l = length
        self.w = width
        self.f=0
        self.lwh = (length,width,height)

for i in range(1,3):
      for j in range(1,3):
           for k in range(1,3):
                coordinates=threed(i,j,k)

问题是我的函数每次都重写变量坐标,这样我就不能访问坐标(1,1,1)。在

请注意,以上是针对2x2x2对象的。在

如何高效地编写它,以便可以根据需要引用任何坐标?在


Tags: 函数inselfforinitdefrangewidth
2条回答

您可以:

[threed(*x) for x in itertools.product(range(1, 3), range(1,3), range(1,3))]

拥有每一件物品。您还可以使用3for循环:

^{pr2}$

__repr__方法添加到类中,可以更容易地看到结果。在

def __repr__(self):
    return 'threed' + repr(self.lwh)

所以第一个代码的输出是:

[threed(1, 1, 1), threed(1, 1, 2), threed(1, 2, 1), threed(1, 2, 2), 
 threed(2, 1, 1), threed(2, 1, 2), threed(2, 2, 1), threed(2, 2, 2)]

要允许比较threed对象,可以添加__eq__方法:

def __eq__(self, other):
    return self.lwh == other.lwh

coordinates=threed(i,j,k)之后,您可以将坐标添加到字典中,以便以后高效地访问。在

比如:

obj3d = dict()
for i in range(1,3):
      for j in range(1,3):
           for k in range(1,3):
                key = (i, j, k)
                obj3d[key] = threed(*key)

然后有一个obj3d字典,可以执行以下操作:

^{pr2}$

当然,您可以使用itertools等来整理您生成坐标的方式,但是我将这个答案集中在以后获得一个有效的访问坐标的方法上。在

相关问题 更多 >

    热门问题