有没有办法在Python中一次创建多个对象?
假设我想用1.000.000个对象实例填充一个列表。有没有办法在一次调用中创建对象,而不是逐个在循环中初始化对象?
逐个迭代需要一些时间,我正在寻找一种方法,而不是运行许多线程来减少这一时间。
我的Python之旅是在一个月前开始的,所以我对Python的许多特殊技巧一无所知。有什么建议可以解决这个问题吗?
发布于 2014-08-17 02:39:34
您必须迭代N次才能在for循环或list comp中创建N个对象。
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]发布于 2014-08-17 02:49:15
objectList = [None] * 1000 # Make a list of 1000 None's已添加
如果您想要预分配列表,以避免在列表不断增长时重新分配列表的开销,这种构造是合适的,因为它将为列表分配整个内存,并使用相同的对象初始化列表的每个成员。
如果您需要将每个成员初始化为不同的对象,则必须通过循环、列表理解等方式分别初始化每个列表元素。
Windows下的内存重新分配比基于Unix的系统要慢得多,因此这种方法比简单地初始化循环更快,因为这种构造是以本机速度运行的。
发布于 2014-08-17 02:54:27
我会使用生成器:
>>> 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]https://stackoverflow.com/questions/25342694
复制相似问题