如何在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
希望能帮助到你..!! ;)