在Python中使用map方法

时间:2013-03-30 22:01:38

标签: python map

我在Python中有一些类:

class Class1:
    def method(self):
        return 1
class Class2:
    def method(self):
        return 2

以及列表myList,其元素都是Class1Class2的实例。我想创建一个新列表,其元素是在method的每个元素上调用的myList的返回值。我尝试过使用“虚拟”基类

class Class0:
    def method(self):
        return 0
class Class1(Class0):
    def method(self):
        return 1
class Class2(Class0):
    def method(self):
        return 2

但如果我尝试map(Class0.method, myList),我就会得到[0, 0, 0, ...]。我对Python有点新鲜,我听说“鸭子打字”比实际继承更受欢迎,所以这可能是错误的方法。当然,我可以做到

[myList[index].method() for index in xrange(len(myList))]

但我喜欢map的简洁。有没有办法继续使用map

3 个答案:

答案 0 :(得分:4)

operator.methodcaller工具正是您所需要的:

map(methodcaller("method"), myList)

或者你可以使用列表理解:

[obj.method() for obj in myList]

答案 1 :(得分:3)

这是最好的:

[o.method() for o in myList]

地图似乎受到人们对Haskell或Lisp的青睐,但是Python有很好的迭代结构,你可以使用它。

答案 2 :(得分:3)

您可以使用

map(lambda e: e.method(), myList)

但我认为这更好:

[e.method() for e in myList]

PS:我认为{em}