python - 创建非对称多维数组
问题描述
语境
我还没有找到关于如何在 python 中创建“非对称*”多维数组的通用问题。*对于不对称,我的意思是一些元素本身就是数组,它们的长度不同。
尝试 0
second_dim = [1,2]
second_dim[0] = [1,5]
second_dim[1] = [1,5,9]
list = [ [ [ [ '' for i in range(2) ] for j in range(len(second_dim[i])) ] for k in range(5) ] for l in range(6) ]
请注意,这会产生错误:undefined name i
问题
如何使用参数在 python 中构造这样一个数组?
^假设:
- 维度 0 有长度
a = 2
- 维度 0 的第一个元素有长度
b = 2
- 维度 0 的第二个元素有长度
c = 3
- 尺寸 2 有长度 5 尺寸 4 有长度
d = 5
- 尺寸 3 有长度 5 尺寸 4 有长度
e = 6
解决方案
我真的不确定您的示例是什么意思,但这可能会有所帮助。
如果您在这样的列表中定义所需的尺寸:
dims = [
[4, 5],
[5, 6, 2],
]
您可以使用一个非常简单的递归函数:
def make_dims(dims, fill_func=int):
if isinstance(dims, int):
return [fill_func() for _ in range(dims)]
return [make_dims(x, fill_func) for x in dims]
l = make_dims(dims)
创建具有“维度”的列表列表,如下所示:
len(l) == len(dims) == 2
len(l[0]) == len(dims[0]) == 2
len(l[0][0]) == dims[0][0]) == 4
len(l[0][1]) == dims[0][1]) == 5
len(l[1]) == len(dims[1]) == 3
len(l[1][0]) == dims[1][0] == 5
len(l[1][1]) == dims[1][1] == 6
len(l[1][2]) == dims[1][2] == 2
并且所有最后一级元素都是fill_func()
生产者返回的任何内容。
对于您的示例second_dim = [[1, 5], [1, 5, 9]]
,调用make_dims(second_dim)
只是开箱即用。
但是,如果您确定您不需要此解决方案提供的更多维度的灵活性并且您坚持使用列表理解,那么您的“尝试 0”就不会太远了。但是,您只需要更好地跟踪正在处理的值:
[[[0 for _ in range(y)] for y in x] for x in second_dim]
推荐阅读
- algorithm - 寻峰算法 MIT OCW 6.006 - 它总是存在吗?
- github - 当我在功能分支上时,Netbeans 项目未部署
- sql - SQL 代码,用于预测一年内每个月将有多少客户达到 55 岁
- node.js - 节点JS | 猫鼬不更新数据库中的值
- php - 使用 Laravel Eloquent 和命名绑定的 SQL 查询:混合命名参数和位置参数
- node.js - 由于 node-pre-gyp 错误,无法安装 npm
- javascript - 多选输入 - 查找添加和删除项目 Javascript
- c# - 在 Grpc.Core 通道上禁用 SSL 证书验证
- elasticsearch - 从 OpenDistro docker 映像运行时“Kibana 服务器尚未准备好”
- python - 如何创建交互稀疏矩阵?