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

时间:2010-10-30 00:44:59

标签: python

我正在尝试建立一个计数直方图...所以我创建了桶。 我知道我可以通过并附加一堆零,即这些内容:

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

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

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

10 个答案:

答案 0 :(得分:316)

答案 1 :(得分:86)

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

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

以避免行之间的参考共享。

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

答案 2 :(得分:17)

您可以将list乘以整数n,以重复list n次:

buckets = [0] * 100

答案 3 :(得分:17)

使用此:

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

OR

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

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

答案 4 :(得分:12)

使用numpy

import numpy
zarray = numpy.zeros(100)

然后使用Histogram库函数

答案 5 :(得分:3)

最简单的解决方案是

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

一般情况下,您应该使用更多pythonic代码,例如列表推导(在您的示例中为[0 for unused in xrange(100)])或使用string.join作为缓冲区。

答案 6 :(得分:2)

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

buckets = []   # this is a list

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

from array import array

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

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

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

pythonic 版本非常慢,当您使用数千个值初始化几百个数组时,差异非常明显。

答案 7 :(得分:0)

根据收集后数据的实际情况,collections.defaultdict(int)可能会有用。

答案 8 :(得分:-1)

我想通过发布示例程序及其输出

来帮助您

计划: -

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..inou初始化它们,可以将它们声明为:

X = [0] * 10

希望它有所帮助.. !! ;)

答案 9 :(得分:-2)

如果您需要更多列:

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