使用方法从列表中的最后一个元素

时间:2013-11-21 08:58:07

标签: python list oop

我试图通过以下方式从列表中获取最后一个位置:

X = ['A','B','C']  
Y = ['1','2','3']

class Combination:
    def __init__(self,x,y):
        if (x in X) and (y in Y):
            self.x = x
            self.y = y
        else:
            print "WRONG!!"

    def __str__ (self):
        return x+y

class Position:
    def __init__(self):
        self.xy = []
        for i in X:
            for j in Y:
                self.xy.append(Combination(i,j))

    def choose_last(self):
        return self.xy.pop()

    def __str__(self):
        return "List contains: " + str(self.xy)

P1 = Position()
print P1
P2 = Position.choose_last()
print P2

我的结果是:

List contains: [A1, A2, A3, B1, B2, B3, C1, C2, C3]

Line 30: TypeError: choose_last() takes exactly 1 arguments (0 given)

由于我是OOP的新手,我不知道我在这里做错了什么。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您可以使用[-1]访问列表的最后一项:

>>> lst = range(10)
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst[-1]
9

pop会从列表中删除该项目。


无论如何,你使用的是错误的类。

在这种特定情况下 - 你应该这样做:

pos = Position()
print pos
last_item = pos.choose_last()
print last_item 

而不是:

P1 = Position()
print P1
P2 = Position.choose_last()
print P2

答案 1 :(得分:0)

List contains: [A1, A2, A3, B1, B2, B3, C1, C2, C3]

Line 30: TypeError: choose_last() takes exactly 1 arguments (0 given)

这是因为你为一个类而不是对象调用choose_last()。在Python中,所有调用类(对象)实例的方法都有一个隐含的第一个参数:self

换句话说,调用P1.choose_last()就像:

Position.choose_last(P1)

Interpreter希望您传递一个参数self,或者调用对象的方法,而不是类。当然,调用对象的方法是首选的OOP方法,因为你可以编写代码而不知道对象的确切类 - 你操作的对象可以是polymorphic

来自Python文档:

  

实际上,你可能已经猜到了答案:特别的事情   方法是将对象作为第一个参数传递   功能。在我们的示例中,调用x.f()完全等效于   MyClass.f(X)。通常,使用n个参数列表调用方法   相当于用参数调用相应的函数   通过在第一个方法之前插入方法的对象而创建的列表   参数。

至于从列表中检索最后一个元素,按照惯例,负指数意味着'我从头算起':

def choose_last(self):
    return self.xy[-1]