Python: 如何在map()函数中使用构造函数?

11

假设我有一个类,其构造函数接受一个整数参数。我有一个整数列表。如何使用 map() 创建一个该类的对象列表,其中每个对象都是使用其对应的整数构造的?

3个回答

22

像其他函数一样吗?

>>> class Num(object):
...     def __init__(self, i):
...             self.i = i
... 
>>> print map(Num, range(10))
[<__main__.Num object at 0x100493450>, <__main__.Num object at 0x100493490>, <__main__.Num object at 0x1004934d0>, <__main__.Num object at 0x100493510>, <__main__.Num object at 0x100493550>, <__main__.Num object at 0x100493590>, <__main__.Num object at 0x1004935d0>, <__main__.Num object at 0x100493610>, <__main__.Num object at 0x100493650>, <__main__.Num object at 0x100493690>]

4
map(lambda x: MyClass(..., x,...), list_of_ints)

同时考虑使用列表解析来代替 map

[MyClass(..., x, ...) for x in list_of_ints]

无论上述哪一个选项,都将返回你的类的对象列表,假设MyClass(...,x,...)是你的类,list_of_ints是你的整数列表。

@J.F.Sebastian,问题并没有说构造函数仅接受一个整数类型的参数,因此我认为这个答案不应该被扣分。 - Cristian Ciupitu
@CristianCiupitu:我没有对它进行投票。尽管我把问题解释为构造函数只有一个参数,即OP可能不知道类是一流公民,特别是您可以将它们作为函数参数传递,此外它们是可调用的。 - jfs
@J.F.Sebastian,好的,看来这只是巧合。说得好。 - Cristian Ciupitu

1

结账 itertools.starmap

In [1]: import itertools
In [2]: class C:
   ...:     def __init__(self, arg1, arg2):
   ...:         pass
   ...:     
In [3]: classes = itertools.starmap(C, [(1,2), (3,4)])
In [4]: print list(classes)
[<__main__.C instance at 0x10e99b7e8>, <__main__.C instance at 0x10e99b830>]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接