Python调用类,列表输入

时间:2017-06-07 22:52:49

标签: python list

我有一个名为Interval的类,我想从一个间隔列表中创建多个间隔对象。我如何使用地图?

class Interval(object):
    def __init__(self, s=0, e=0):
        self.start = s
        self.end = e

intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]]

我试着这样做:

objs = map(Interval, intervals)

但是这会将完整间隔作为第一个参数发送,而不是单独输入类。

3 个答案:

答案 0 :(得分:2)

您可以使用itertools中的starmap

from itertools import starmap

objs = starmap(Interval,intervals)

请注意starmap懒惰地工作(如Python-3.x中的map)并且您需要实现它,例如使用list(..)

>>> list(objs)
[<__main__.Interval object at 0x7efbf7e82358>, <__main__.Interval object at 0x7efbf7e82390>, <__main__.Interval object at 0x7efbf7e823c8>, <__main__.Interval object at 0x7efbf7e82400>, <__main__.Interval object at 0x7efbf7e82438>]

如果您不想使用itertools库,则等效项为:

objs = map(lambda x: Interval(*x),intervals)

据我所知,这就是为什么他们称之为 star 地图:因为如果你要使用lambda表达式,那就是星号。

答案 1 :(得分:2)

这对我有用。

>>> objs = []
>>> for interval in intervals:
...     objs.append(Interval(*interval))
... 
>>> objs
[<__main__.Interval object at 0x013E67D0>, <__main__.Interval object at 0x013E6910>, <__main__.Interval object at 0x013E68F0>, <__main__.Interval object at 0x013E6870>, <__main__.Interval object at 0x013E6950>]
>>> objs[0]
<__main__.Interval object at 0x013E67D0>
>>> objs[0].start
1
>>> objs[0].end
2
>>> 

答案 2 :(得分:0)

也许你也可以尝试老派的方式:

class Interval(object):
    def __init__(self, s=0, e=0):
        self.start = s
        self.end = e


def map_intervals(intervals):
        ret = []
        for inter in intervals:
          ret.append(Interval(inter[0],inter[1]))
        return ret
inters = [[1,2],[3,5],[6,7],[8,10],[12,16]]