在Python中初始化一个固定大小的数组
我想知道如何我可以初始化一个数组(或列表),但尚未填充值,有一个定义的大小。
例如在C:
int x[5]; /* declared without adding elements*/
我如何在Python中做到这一点?
谢谢。
您可以使用:
>>> lst = [None] * 5 >>> lst [None, None, None, None, None]
为什么这些问题得不到明显的答案?
a = numpy.empty(n, dtype=object)
这将创build一个可以存储对象的长度为n的数组。 它不能被调整或附加到。 特别是它不会浪费空间。 这是Java的等价物
Object[] a = new Object[n];
如果你真的对性能和空间感兴趣,并且知道你的数组只能存储某些数字types,那么你可以把dtype参数改成其他值,比如int。 然后numpy将这些元素直接包装到数组中,而不是使数组引用int对象。
最好的select是使用numpy库。
from numpy import ndarray a = ndarray((5,),int)
做这个:
>>> d = [ [ None for y in range( 2 ) ] for x in range( 2 ) ] >>> d [[None, None], [None, None]] >>> d[0][0] = 1 >>> d [[1, None], [None, None]]
其他解决scheme将导致这样的问题:
>>> d = [ [ None ] * 2 ] * 2 >>> d [[None, None], [None, None]] >>> d[0][0] = 1 >>> d [[1, None], [1, None]]
>>> 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.])
一个简单的解决scheme是x = [None]*length
,但是请注意,它将所有列表元素初始化为None
。 如果大小确实是固定的,你可以做x=[None,None,None,None,None]
。 但严格来说,你不会因为这个瘟疫不存在于Python中而获得未定义的元素。
那么我想通过发布一个示例程序和它的输出来帮助你
程序:
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
希望能帮助到你..!! ;)
>>> 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]
您可以尝试使用描述符来限制大小
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
OUTPUT:
[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]
有一件事情我觉得很容易做到,例如,我为我喜欢的大小设置了一个空string数组
码:
import numpy as np x= np.zeros(5,str) print x
输出:
['' '' '' '' '']
希望这是有帮助的:)
如果你正在使用字节,你可以使用内build的bytearray
。 如果您正在使用其他整型types,请查看内置array
。
具体了解一个list
不是一个array
。
例如,如果你正在尝试创build一个读取文件内容的缓冲区,你可以像下面那样使用bytearray(有更好的方法可以做到这一点,但是这个例子是有效的):
with open(FILENAME, 'rb') as f: data = bytearray(os.path.getsize(FILENAME)) f.readinto(data)
在这个片段中, bytearray
内存预先分配了FILENAME
大小的固定长度(以字节为单位)。 这个预分配允许使用缓冲协议来更有效地将文件读入可变缓冲区而不需要arrays拷贝。 还有更好的方法可以做到这一点,但我相信这会为您的问题提供一个答案。