如何在python中声明零数组(或一定大小的数组)

use*_*880 172 python

我正在尝试建立一个计数直方图...所以我创建了桶.我知道我可以通过并附加一堆零,即沿着这些方向的东西:

buckets = []
for i in xrange(0,100):
    buckets.append(0)
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式吗?我觉得应该有一种方法来声明一个特定大小的数组.

我知道numpy有,numpy.zeros但我想要更通用的解决方案

OK.*_*OK. 93

为了完整性:要在python中声明一个零的多维列表,你必须使用这样的列表推导:

buckets = [[0 for col in range(5)] for row in range(10)]
Run Code Online (Sandbox Code Playgroud)

避免行之间的引用共享.

这看起来比chester1000的代码更笨拙,但如果以后要更改这些值则必不可少.有关更多详细信息,请参阅Python FAQ.


mjh*_*jhm 20

您可以将a乘以list整数n以重复以下list n时间:

buckets = [0] * 100
Run Code Online (Sandbox Code Playgroud)


mee*_*ian 17

用这个:

bucket = [None] * 100
for i in range(100):
    bucket[i] = [None] * 100
Run Code Online (Sandbox Code Playgroud)

要么

w, h = 100, 100
bucket = [[None] * w for i in range(h)]
Run Code Online (Sandbox Code Playgroud)

它们都将输出正确的空多维桶列表100x100


fab*_*ioM 11

使用numpy

import numpy
zarray = numpy.zeros(100)
Run Code Online (Sandbox Code Playgroud)

然后使用直方图库函数

  • 抱歉,明确排除了numpy.zeros. (3认同)

IAb*_*act 5

问题是“如何声明零数组...... ”但是示例代码引用了 Python 列表:

buckets = []   # this is a list
Run Code Online (Sandbox Code Playgroud)

但是,如果有人真的想要初始化一个数组,我建议:

from array import array

my_arr = array('I', [0] * count)
Run Code Online (Sandbox Code Playgroud)

Python 纯粹主义者可能会声称这不是Pythonic并建议:

my_arr = array('I', (0 for i in range(count)))
Run Code Online (Sandbox Code Playgroud)

Python的版本是非常缓慢的,当你有几百个阵列成千上万值进行初始化,差距十分明显。