python中的零列表

这个问题在这里已经有了答案:

  • 在python中创建一个空列表,其中有11个答案

  • #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

    上一篇: List of zeros in python

    下一篇: How long does a microbenchmark need to run?