无需初始化的Python列表声明

时间:2019-04-29 03:33:25

标签: 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[[]]中指定尺寸,它将解决此问题。

2 个答案:

答案 0 :(得分:1)

几件事:

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

答案 1 :(得分:0)

使用理解来初始化列表:

[[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,但是您可以使用适合您算法的任何东西。