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

我正在试图建立一个计数的直方图…所以我创建了桶。 我知道我可以在后面加一串0,比如:

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

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

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

608283 次浏览

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

buckets = [0] * 100

最简单的解决办法是

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

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

使用numpy

import numpy
zarray = numpy.zeros(100)

然后使用柱状图库函数

collections.defaultdict(int)可能很有用,这取决于您在收集数据后实际要对其做什么。

用这个:

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

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

它们都将输出合适的空的多维bucket list 100x100

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

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

避免行之间的引用共享。

这看起来比chester1000的代码更笨拙,但如果以后要更改值,这是必要的。更多细节请参见Python常见问题解答

我想通过发布一个示例程序及其输出来帮助你

程序:

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

希望能有所帮助!!;)

如果需要更多列:

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

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

buckets = []   # this is a list

然而,如果有人真的想初始化一个数组,我建议:

from array import array


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

Python纯粹主义者可能会声称这不是神谕的,并建议:

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

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