如何在python中获得任何大小的空数组?

问题描述 投票:89回答:7

我基本上想在C中使用python等效的py:

int a[x];

但是在python中我声明了一个数组:

a = []

问题是我想为随机插槽分配如下值:

a[4] = 1

但我无法用python做到这一点,因为数组是空的。

python arrays dynamic-arrays
7个回答
186
投票

如果通过“数组”你实际上是指一个Python列表,你可以使用

a = [0] * 10

要么

a = [None] * 10

17
投票

你无法在Python中完成你想要的(如果我没有正确读到你)。您需要为列表的每个元素(或者您调用它,数组)放入值。

但是,试试这个:

a = [0 for x in range(N)]  # N = size of list you want
a[i] = 5  # as long as i < N, you're okay

对于其他类型的列表,使用除了0之外的东西.None通常也是一个不错的选择。


12
投票

你可以使用numpy:

导入numpy为np

来自Empty Array的示例:

np.empty([2, 2])
array([[ -9.74499359e+001,   6.69583040e-309],
       [  2.13182611e-314,   3.06959433e-309]])  

5
投票

你也可以用list的extend方法扩展它。

a= []
a.extend([None]*10)
a.extend([None]*20)

2
投票

只需声明列表并附加每个元素即可。例如:

a = []
a.append('first item')
a.append('second item')

1
投票

如果您(或此问题的其他搜索者)实际上对创建连续数组以填充整数感兴趣,请考虑bytearraymemoryivew

# cast() is available starting Python 3.3
size = 10**6 
ints = memoryview(bytearray(size)).cast('i') 

ints.contiguous, ints.itemsize, ints.shape
# (True, 4, (250000,))

ints[0]
# 0

ints[0] = 16
ints[0]
# 16

0
投票

如果你真的想要一个C风格的数组

import array
a = array.array('i', x * [0])
a[3] = 5
try:
   [5] = 'a'
except TypeError:
   print('integers only allowed')

请注意,python中没有未初始化变量的概念。变量是绑定到值的名称,因此该值必须具有某些值。在上面的示例中,数组使用零进行初始化。

但是,这在python中并不常见,除非你真的需要它用于低级别的东西。在大多数情况下,你可以使用空列表或空的numpy数组,如其他答案所示。

© www.soinside.com 2019 - 2024. All rights reserved.