others - 在 python 中,初始化一个固定大小的数组

我想知道如何初始化一个数组( 或者列表),但要用值填充,以便得到一个定义的大小。

例如在C 中:


int x[5];/* declared without adding elements*/

如何在 python 中进行该操作?

谢谢。

时间:

可以使用:


>>> lst = [None] * 5
>>> lst
[None, None, None, None, None]

最好的方法是使用 numpy的库。


from numpy import ndarray

a = ndarray((5,),int)

为什么这些问题没有得到明显答案?


a = numpy.empty(n, dtype=object)

这将创建一个可以存储对象的长度数组。 不能调整大小或者追加到。 特别是,它不通过填充长度来浪费空间。 这是Java的等价


Object[] a = new Object[n];

如果你对性能和空间感兴趣,并且知道数组只存储某些数字类型,那么你可以将argument参数更改为类似于其他一些值的其他值。 然后numpy将把这些元素直接打包到数组中,而不是将数组引用作为int对象。

一个简单的解决方案是 x = [None]*length,但是请注意它将所有列表元素初始化为 None 。 如果大小是真,你也可以做 x=[None,None,None,None,None] 。 但是严格来讲,你不会得到未定义的元素,因为这在 python 中不存在。


>>> 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]

在附加的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]

我想通过发布一个示例程序和它的输出来帮助你

程序:


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

 

希望它能帮助。;) !

你可以尝试使用描述符来限制大小


class fixedSizeArray(object):
 def __init__(self, arraySize=5):
 self.arraySize = arraySize
 self.array = [None] * self.arraySize

 def __repr__(self):
 return str(self.array)

 def __get__(self, instance, owner):
 return self.array

 def append(self, index=None, value=None):
 print"Append Operation cannot be performed on fixed size array"
 return

 def insert(self, index=None, value=None):
 if not index and index - 1 not in xrange(self.arraySize):
 print 'invalid Index or Array Size Exceeded'
 return
 try:
 self.array[index] = value
 except:
 print 'This is Fixed Size Array: Please Use the available Indices'


arr = fixedSizeArray(5)
print arr
arr.append(100)
print arr
arr.insert(1, 200)
print arr
arr.insert(5, 300)
print arr

输出:


[None, None, None, None, None]
Append Operation cannot be performed on fixed size array
[None, None, None, None, None]
[None, 200, None, None, None]
This is Fixed Size Array: Please Use the available Indices
[None, 200, None, None, None]

我发现很容易做的一件事就是为我喜欢的大小设置一个空字符串数组,例如

代码:


import numpy as np

x= np.zeros(5,str)
print x

输出:


['' '' '' '' '']

希望这有帮助:


>>> 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.])

如果你使用的是字节,你可以使用内置的bytearray 。 如果你正在使用其他整型,请查看内置的array

明确理解 list 不是 array

例如如果你试图创建一个缓冲区来读取文件内容,可以使用字节缓冲区如下( 这样做有更好的方法,但是这个例子是有效的):


with open(FILENAME, 'rb') as f:
 data = bytearray(os.path.getsize(FILENAME))
 f.readinto(data)

在这个Fragment中,bytearray 内存以字节大小的固定长度预先分配。 这种预分配允许使用缓冲区协议更高效地将文件读入可变缓冲区,而不需要数组副本。 有更好的方法可以做到这一点,但我相信这给你的问题提供了一个答案。

...