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

How to declare array of zeros in python (or an array of a certain size)

本问题已经有最佳答案,请猛点这里访问。

我正试图建立一个计数柱状图…所以我创造了桶。我知道我可以通过并附加一些0,也就是沿着这些线的一些东西:

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

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

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


1
buckets = [0] * 100


为了完整性:要在Python中声明多维的零列表,必须使用如下的列表理解:

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

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

这看起来比Chester1000的代码更笨拙,但如果以后要更改这些值,这是非常重要的。有关详细信息,请参阅python常见问题解答。


使用此:

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

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

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


可以将list乘以整数n来重复listn次:

1
buckets = [0] * 100

使用麻木

1
2
import numpy
zarray = numpy.zeros(100)

然后使用柱状图库函数


最简单的解决方案是

1
2
"\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作为缓冲区。


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

1
buckets = []   # this is a list

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

1
2
3
from array import array

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

Python纯化论者可能声称这不是Python,并建议:

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

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


根据收集数据后实际要处理的内容,collections.defaultdict(int)可能很有用。


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

程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

输出:

1
2
3
4
5
2

[1, 2]

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

我希望这能澄清你们关于他们声明的一些基本概念。要用其他特定值初始化它们,例如用0初始化它们,可以将它们声明为:

x=(0)* 10

希望它能帮上忙。!)


如果需要更多的列:

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