2016-05-19 104 views
0

我已被分配为我的Python课程的练习。目标是创建一些几何对象作为要通过某些断言评估的Shape对象的子类。访问列表的索引是列表

下面是代码:

class Shape(object): 
    __metaclass__ = ABCMeta 
    def __init__(self, coords): 
     super(Shape, self).__init__() 
     self._coords = list(map(int, coords)) 

    def __getitem__(self, key): 
     return self._coords[key] 

    def move(self, distance): 
     self._coords = distance 

class Point(Shape): 
    def __init__(self, coords): 
     super(Point,self).__init__(coords) 

if __name__ == '__main__': 
    p = Point((0,0)) 
    p.move((1,1)) 
    assert p[0,0], p[0,1] == (1,1) # Check the coordinates 

的问题是,我怎么能访问在外形超类创建了列表索引COORDS的名单? 列表是否有可能使用另一个列表进行索引?

+2

可能不相关,但是'p [0,0],p [0,1] ==(1,1)'评估为'p [0,0],(p [0,1] ==(1 ,1))' –

+0

有可能有这样的:a = [1,1] 断言[0],a [1] ==(1,1) – kotzimop

+0

a [0],a [1] = =(1,1)'将评估为'(1,False)'。你可能想'assert(a [0],a [1] ==(1,1))'。相关:http://stackoverflow.com/q/37313471/1639625 –

回答

0

如果objdict,则可以使用确切语法obj[m,n]==v

任何hashable(大多数不可变)类型都可以用作字典键。元组(如(1,2))是可散列的。因此,有效的实例化一个字典:

>>> my_dict = { (1,2):'A', (6,7,8):'B' } 

可以对其进行索引:

>>> my_dict[1,2] 
'A' 
>>> my_dict[6,7,8] 
'B' 
>>> assert my_dict[6,7,8] == 'B' 

这种方法将允许您匹配断言语法。

+0

谢谢。我会尽力把我的列表变成一本字典 – kotzimop

0

如果我正确理解你,你想访问另一个列表中的列表中的元素。

为此,您只需在单独的一对方括号中编写每个索引。

如果列表是nested_list = [ [1, 2] , [3, 4] ]您访问项目4这样的:

print(nested_list[1][0]) 

等于低于长期形式,这应该澄清如何链接索引查找UPS的工作原理:

inner_list = nested_list[1] 
print(inner_list[0]) 
+0

我很容易断言我的Point实例:p [0],p [1] ==(1,1)。这是真的。但我必须明确地遵循练习的规则。问题是这对坐标是这样的列表p._coords = [1,1]。所以我不知道如何实现p [0,0],以便访问它可以很容易地访问的内容,p [0] – kotzimop