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有
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
可以将
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代码的列表理解(在您的示例中:
问题是"如何声明零数组…",但是示例代码引用了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)] |