python中的零列表
这个问题在这里已经有了答案:
#add code here to figure out the number of 0's you need, naming the variable n.
listofzeros = [0] * n
如果你喜欢把它放在函数中,只需放入该代码并添加return listofzeros
这看起来像这样:
def zerolistmaker(n):
listofzeros = [0] * n
return listofzeros
样本输出:
>>> zerolistmaker(4)
[0, 0, 0, 0]
>>> zerolistmaker(5)
[0, 0, 0, 0, 0]
>>> zerolistmaker(15)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>>
$python 2.7.8
from timeit import timeit
import numpy
timeit("list(0 for i in xrange(0, 100000))", number=1000)
> 8.173301935195923
timeit("[0 for i in xrange(0, 100000)]", number=1000)
> 4.881675958633423
timeit("[0] * 100000", number=1000)
> 0.6624710559844971
timeit('list(itertools.repeat(0, 100000))', 'import itertools', number=1000)
> 1.0820629596710205
你应该使用[0] * n
来生成一个有n
零的列表。
看看为什么[]比list()更快
尽管如此, itertools.repeat
和[0] * n
都会创建其元素引用相同id
列表。 这对于像整数或字符串这样的不可变对象来说并不是问题,但是如果您尝试创建像列表列表一样的可变对象列表( [[]] * n
),那么所有元素都会引用同一个对象。
a = [[]] * 10
a[0].append(1)
a
> [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
[0] * n
将立即创建列表,而repeat
可用于在第一次访问时懒惰地创建列表。
如果您处理的数据量非常大,并且您的问题不需要列表中可变长度的列表或多个数据类型,则最好使用numpy
数组。
timeit('numpy.zeros(100000, numpy.int)', 'import numpy', number=1000)
> 0.057849884033203125
numpy
数组也将消耗更少的内存。
创建所有值相同的列表的最简单方法是将单元素列表乘以n
。
>>> [0] * 4
[0, 0, 0, 0]
所以对于你的循环:
for i in range(10):
print [0] * i
链接地址: http://www.djcxy.com/p/31689.html