How to create an integer array in Python?

前端 未结 8 705
旧巷少年郎
旧巷少年郎 2020-12-24 01:11

It should not be so hard. I mean in C,

int a[10]; 

is all you need. How to create an array of all zeros for a random size. I know the zero

8条回答
  •  失恋的感觉
    2020-12-24 02:03

    If you need to initialize an array fast, you might do it by blocks instead of with a generator initializer, and it's going to be much faster. Creating a list by [0]*count is just as fast, still.

    import array
    
    def zerofill(arr, count):
        count *= arr.itemsize
        blocksize = 1024
        blocks, rest = divmod(count, blocksize)
        for _ in xrange(blocks):
            arr.fromstring("\x00"*blocksize)
        arr.fromstring("\x00"*rest)
    
    def test_zerofill(count):
        iarr = array.array('i')
        zerofill(iarr, count)
        assert len(iarr) == count
    
    def test_generator(count):
        iarr = array.array('i', (0 for _ in xrange(count)))
        assert len(iarr) == count
    
    def test_list(count):
        L = [0]*count
        assert len(L) == count
    
    if __name__ == '__main__':
        import timeit
        c = 100000
        n = 10
        print timeit.Timer("test(c)", "from __main__ import c, test_zerofill as test").repeat(number=n)
        print timeit.Timer("test(c)", "from __main__ import c, test_generator as test").repeat(number=n)
        print timeit.Timer("test(c)", "from __main__ import c, test_list as test").repeat(number=n)
    

    Results:

    (array in blocks) [0.022809982299804688, 0.014942169189453125, 0.014089107513427734]
    (array with generator) [1.1884641647338867, 1.1728270053863525, 1.1622772216796875]
    (list) [0.023866891860961914, 0.035660028457641602, 0.023386955261230469]
    

提交回复
热议问题