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

我正在build立一个计数的直方图…所以我创build了桶。 我知道我可以通过并追加一堆零,即沿着这些线:

buckets = [] for i in xrange(0,100): buckets.append(0) 

有没有更好的方法来做到这一点? 我觉得应该有一种方法来声明一个特定大小的数组。

我知道numpy有numpy.zeros但我想要更一般的解决scheme

 buckets = [0] * 100 

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

 buckets = [[0 for col in range(5)] for row in range(10)] 

以避免行之间的引用共享。

这看起来比chester1000的代码笨拙,但是如果值稍后应该改变的话,这是非常重要的。 有关更多详细信息,请参阅Python FAQ 。

因为这是谷歌和一些search的第一个结果,我想包括相同的声明,但对于multidimensional array:

 buckets = [ [0] * 100 ] * 100 # DOES NOT WORK! 

这是一个100x100arrays填充零

编辑+警告

先看看评论! 这种方法不能正常工作! 它只复制对同一个列表的引用。 因此,您将得到一个唯一的列表和100个引用。 不要使用它!

而是使用:

 bucket = [None] * 100 for i in range(100): bucket[i] = [None] * 100 

要么

 w, h = 100, 100 bucket = [[None] * w for i in range(h)] 

他们都会输出适当的空多维列表100×100

你可以用一个整数n乘以一个list重复list n次:

 buckets = [0] * 100 

使用numpy

 import numpy zarray = numpy.zeros(100) 

然后使用直方图库函数

最简单的解决scheme是

 "\x00" * size # for a buffer of binary zeros [0] * size # for a list of integer zeros 

一般来说,你应该使用更多的pythonic代码,如列表string.join (在你的例子中: [0 for unused in xrange(100)] string.join [0 for unused in xrange(100)] )或者使用string.join作为缓冲区。

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

 buckets = [] # this is a list 

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

 from array import array my_arr = array('I', [0] * count) 

Python纯粹主义者可能会声称这不是pythonic,并build议:

 my_arr = array('I', (0 for i in range(count))) 

pythonic版本非常慢,当你有几百个数组被初始化为数千个数值时,差异是相当明显的。

根据收集到的实际数据,collections.defaultdict(int)可能是有用的。

如果你需要更多的列:

 buckets = [[0., 0., 0., 0., 0.] for x in range(0)] 

那么我想通过发布一个示例程序和它的输出来帮助你

计划: –

 t=input("") x=[None]*t y=[[None]*t]*t for i in range(1,t+1): x[i-1]=i; for j in range(1,t+1): y[i-1][j-1]=j; print x print y 

输出: –

 2 [1, 2] [[1, 2], [1, 2]] 

我希望这个清楚你的声明的一些非常基本的概念。 要初始化他们与其他一些具体的价值观,如初始化0 ..你可以声明他们为:

X = [0] * 10

希望能帮助到你..!! ;)