如何创建一个只包含零的列表?我希望能够为范围(10)中的每个int创建一个0列表
例如,如果范围内的int是4,我将得到:
[0,0,0,0]
对于7:
[0,0,0,0,0,0,0]
如何创建一个只包含零的列表?我希望能够为范围(10)中的每个int创建一个0列表
例如,如果范围内的int是4,我将得到:
[0,0,0,0]
对于7:
[0,0,0,0,0,0,0]
当前回答
#add code here to figure out the number of 0's you need, naming the variable n.
listofzeros = [0] * n
如果您喜欢将其放在函数中,只需放入该代码并添加return listofzero即可
看起来是这样的:
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]
>>>
其他回答
创建所有值都相同的列表的最简单方法是将单元素列表乘以n。
>>> [0] * 4
[0, 0, 0, 0]
对于你的循环:
for i in range(10):
print [0] * i
$ python3
>>> from itertools import repeat
>>> list(repeat(0, 7))
[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都有一个问题。重复执行,[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数组也将消耗更少的内存。
zlists = [[0] * i for i in range(10)]
Zlists[0]是0个0的列表,Zlists[1]是1个0的列表,Zlists[2]是2个0的列表,等等。
#add code here to figure out the number of 0's you need, naming the variable n.
listofzeros = [0] * n
如果您喜欢将其放在函数中,只需放入该代码并添加return listofzero即可
看起来是这样的:
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]
>>>