我想知道我如何可以初始化一个数组(或列表),尚未与值填充,有一个定义的大小。
例如在C语言中:
int x[5]; /* declared without adding elements*/
在Python中如何做到这一点?
我想知道我如何可以初始化一个数组(或列表),尚未与值填充,有一个定义的大小。
例如在C语言中:
int x[5]; /* declared without adding elements*/
在Python中如何做到这一点?
当前回答
最好的办法是使用numpy库。
from numpy import ndarray
a = ndarray((5,),int)
其他回答
如果你正在使用字节,你可以使用内置的bytearray。如果使用其他整型,请查看内置数组。
明确地理解列表不是数组。
例如,如果你试图创建一个缓冲区来读取文件内容,你可以使用bytearray,如下所示(还有更好的方法,但这个例子是有效的):
with open(FILENAME, 'rb') as f:
data = bytearray(os.path.getsize(FILENAME))
f.readinto(data)
在这个代码片段中,bytearray内存被预先分配为固定长度的FILENAMEs大小(以字节为单位)。这种预分配允许使用缓冲区协议更有效地将文件读入可变缓冲区,而无需复制数组。还有更好的方法来做到这一点,但我相信这为你的问题提供了一个答案。
最好的办法是使用numpy库。
from numpy import ndarray
a = ndarray((5,),int)
>>> n = 5 #length of list
>>> list = [None] * n #populate list, length n with n entries "None"
>>> print(list)
[None, None, None, None, None]
>>> list.append(1) #append 1 to right side of list
>>> list = list[-n:] #redefine list as the last n elements of list
>>> print(list)
[None, None, None, None, 1]
>>> list.append(1) #append 1 to right side of list
>>> list = list[-n:] #redefine list as the last n elements of list
>>> print(list)
[None, None, None, 1, 1]
>>> list.append(1) #append 1 to right side of list
>>> list = list[-n:] #redefine list as the last n elements of list
>>> print(list)
[None, None, 1, 1, 1]
或者一开始就什么都没有:
>>> n = 5 #length of list
>>> list = [] # create list
>>> print(list)
[]
>>> list.append(1) #append 1 to right side of list
>>> list = list[-n:] #redefine list as the last n elements of list
>>> print(list)
[1]
在append的第4次迭代中:
>>> list.append(1) #append 1 to right side of list
>>> list = list[-n:] #redefine list as the last n elements of list
>>> print(list)
[1,1,1,1]
5及所有后续:
>>> list.append(1) #append 1 to right side of list
>>> list = list[-n:] #redefine list as the last n elements of list
>>> print(list)
[1,1,1,1,1]
为什么这些问题没有得到显而易见的答案呢?
a = numpy.empty(n, dtype=object)
这将创建一个长度为n的数组,用于存储对象。它不能被调整大小或追加。特别是,它不会因为填充长度而浪费空间。这是Python中与Java相同的部分
Object[] a = new Object[n];
如果你真的对性能和空间感兴趣,并且知道你的数组只存储某些数值类型,那么你可以将dtype参数更改为其他一些值,比如int。然后numpy将这些元素直接打包到数组中,而不是使数组引用int对象。
>>> import numpy
>>> x = numpy.zeros((3,4))
>>> x
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
>>> y = numpy.zeros(5)
>>> y
array([ 0., 0., 0., 0., 0.])
X是二维数组,y是一维数组。它们都是0初始化的。