不初始化的 Python 列表声明



类似于C/C++等其他编程语言,在Python中,我们是否有一种无需初始化即可声明数组的方法(类似于data[1][3](?在这里,我有一个创建空 2D 列表的片段:

data=[[]]
data[0]=[1,2,3]
data[1]=[3,4,5] //this will create an error since its out of bound access

就我而言,我想静态定义行数和列数。我相信 append() API 可能会有所帮助,但更好的是传统的初始化方式(因为我的输入数据是从其他地方复制的(。我相信,如果我能指定data[[]]大小,它将解决问题。

几件事:

  1. Python 没有变量声明。变量是动态类型的。
  2. Vanilla Python 没有数组。如果要使用数组,numpy比嵌套列表高效得多

现在,关于你的问题,你可以使用列表推导来搭建"数组"的结构:

y, x = columns, rows
[['_' for _ in range(y)] for _ in range(x)]

[[None for _ in range(y)] for _ in range(x)]

正如@Tomothy所指出的,这可以简化一点:

[[None] * y for _ in range(x)]

使用推导式初始化列表:

[[None for _ in range(columns)] for _ in range(rows)]

例:

>>> data = [[None for _ in range(3)]]
>>> data
[[None, None, None]]
>>> data[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

请注意,在python中,您需要用一些默认值填充它们,我使用了None但是您可以使用任何适合您的算法的值。

最新更新