如何在 Python 中获得任意大小的空列表?

我基本上希望在 C 语言中使用类似于 Array 的 Python 语言:

int a[x];

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

a = []

问题是我想随机分配一些值,比如:

a[4] = 1

但是我不能对 Python 这样做,因为 Python 列表是空的(长度为0)。

588061 次浏览

如果“ array”实际上指的是 Python 列表,则可以使用

a = [0] * 10

或者

a = [None] * 10

在 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之外的其他类型通常也是一个不错的选择。

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

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

你可以使用 numpy:

import numpy as np

来自 空数组的例子:

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

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

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

如果你(或者这个问题的其他搜索者)实际上对创建一个用整数填充的连续数组感兴趣,考虑一下 Bytearray回忆录:

# 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

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

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

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

然而,这在 python 中并不常见,除非您实际上需要它来处理低级别的东西。在大多数情况下,您最好使用空列表或空 numpy 数组,正如其他答案所建议的那样。

x=[]
for i in range(0,5):
x.append(i)
print(x[i])

我认为分配“随机插槽”的唯一方法是使用字典,例如:

 a = {}     # initialize empty dictionary
a[4] = 1   # define the entry for index 4 to be equal to 1
a['French','red'] = 'rouge'  # the entry for index (French,red) is "rouge".

这对于“快速破解”来说非常方便,如果您没有对数组元素的密集访问权限,那么查找开销是不相关的。 否则,使用固定大小的预分配(例如 numpy)数组会更有效率,可以使用 a = np.empty(10)(对于长度为10的非初始化向量)或 a = np.zeros([5,5])(对于用零初始化的5x5矩阵)来创建这些数组。

注意: 在您的 C 示例中,在分配一个(不是这样的)“随机槽”(即0和 x-1之间的整数索引)之前,还必须分配数组(int a[x];)。

参考文献:

也可以创建具有一定大小的空数组:

array = [[] for _ in range(n)] # n equal to your desired size
array[0].append(5) # it appends 5 to an empty list, then array[0] is [5]

如果你把它定义为 array = [] * n,那么如果你修改一个条目,所有条目都会以相同的方式改变,因为它是可变的。