2017-06-07 2 views
1

インターバルのリストから複数のインターバルオブジェクトを作成するインターバルというクラスがあります。私はどのようにマップでそれを行うのですか?リストからの入力を持つPythonコールクラス

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

OBJS =リスト(マップ(間隔、間隔が)) –

+0

@AlanLeuthard動作するはずです:それが動作したが、その後、 'S'は、入力としてリストを取得し、' e'は、すべてのケースのために '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)

私が知る限り、彼らはそれをスターマップと呼びます:ラムダ式を使用する場合はアスタリスクのためです。

+1

夜のこの時どこにいらっしゃいますか?ハハハ、また良い答え...私は認めなければならない –

+0

ああ! starmap、これは私が探していたものです。ありがとう! – Pritam

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]] 
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 
>>> 
+0

うん、それは動作します!良い –

+0

うん、それは動作します!良い –

関連する問題