我有一个名为 Interval 的类,我想为它从一个间隔列表中创建多个间隔对象。我如何使用 map 做到这一点?
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)
但这会将完整间隔作为第一个参数发送,而不是将输入单独发送到类。
最佳答案
您可以使用 starmap
来自 itertools
:
<b>from itertools import starmap</b>
objs = <b>starmap</b>(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(<b>lambda x: Interval(*x)</b>,intervals)
据我所知,这就是为什么他们称它为 starmap:因为如果您要使用 lambda 表达式,则带有星号。
关于带有来自列表的输入的 Python 调用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44424003/