python - 没有初始化的 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[[]]
,它将解决问题。
解决方案
几件事:
- Python 没有变量声明。变量是动态类型的。
- 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)]
推荐阅读
- typescript - Webpack 5:更改打字稿声明文件的目录
- mysql - MySQL 查询以在单个 SQL 语句中从主表中检索主记录和从另一个表中检索子记录
- sql - 如何提取分隔符之间写入的数据?
- javascript - TypeError:components.map 不是函数
- c# - 我应该将与对象相关的字段放在哪个类中?
- terraform - Terraform 中具有动态键和值的块的属性
- node.js - 部署到 heroku - 白屏 - 没有明显错误 - MERN 堆栈在本地工作得很好,包括 API 请求 - 已经尝试了 27 次部署
- websocket - 有时 cypress 在通过 websocket 调用获取新信息时似乎阻止了 DOM 的更新
- r - 计算R中时间序列数据中每个点的趋势
- python - ```HyperlinkedModelSerializer```中配置不正确的lookup_field错误