我有一个名为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)
但是这会将完整间隔作为第一个参数发送,而不是单独输入类。
答案 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]]