Python - 如何一次创建多个对象?

时间:2014-08-16 18:35:50

标签: python object initialization

有没有办法在Python中一次创建多个对象?

假设我想用1.000.000对象实例填充列表。而不是在循环中逐个初始化对象,有没有办法在一次调用中创建它们?

逐个迭代需要一些时间,我正在寻找一种方法,除了运行多个线程以减少这个时间。

我的Python冒险在一个月前开始,所以我完全没有意识到许多Python特有的技巧。有任何提示如何处理这个问题?

3 个答案:

答案 0 :(得分:3)

你必须迭代N次以制作N个对象,可以是for循环或列表comp。

objectList = [object() for _ in range(1000000)]

例如,实例化int

列表
intList = [int() for _ in range(1000000)]

有关10 int的小清单:

>>> [int() for _ in range(10)]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

答案 1 :(得分:0)

objectList = [None] * 1000#列出1000无

ADDED

如果您想要预先分配列表以避免在列表继续增长时重新分配列表的开销,则此构造是合适的,因为它将为列表分配整个内存并使用相同的对象初始化列表的每个成员

如果需要将每个成员初始化为另一个对象,则必须通过循环,列表推导等单独初始化每个列表元素。

Windows下的内存重新分配往往比基于Unix的系统慢一点,所以这种方法比简单地初始化循环更快,因为这种结构以本机速度运行。

答案 2 :(得分:0)

我会使用发电机:

>>> def obj(x):
...    print 'obj called with', x
...    return x
... 
>>> gen=(obj(x) for x in xrange(10))

请注意,此时尚未调用obj。一旦你真正转换为一个列表(或者更好的是,迭代它),将依次创建对象:

>>> list(gen)
obj called with 0
obj called with 1
obj called with 2
obj called with 3
obj called with 4
obj called with 5
obj called with 6
obj called with 7
obj called with 8
obj called with 9
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]