Julia中如何使用for循环填充空嵌套向量(向量的向量)
问题说明
已知目标嵌套向量b、已赋值嵌套向量a定义如下:
b=[ [1,[2,3,7]], [2,[7,2,7]], [3,[2,3,9]] ] a=[ [2,3,7],[7,2,7],[2,3,9] ]
要求从空嵌套向量(元素为向量的向量)出发,通过for循环构造得到目标b,现有错误实现代码无法运行:
b=[ [ ] ] for i in 1:3 b[i][1]=i b[i][2]=a[i] end
原代码问题点
- 外层
b初始化时仅包含1个空内层向量,长度为1,循环执行到i=2、i=3时访问b[2]、b[3]会触发索引越界错误 - 空向量不存在索引为1、2的元素,直接对不存在的索引位赋值会触发报错
正确实现
方式1:逐次追加元素(最简洁)
初始化外层为空向量,每次循环构造好当前内层的[i, a[i]],直接追加到外层向量即可:
b = [] for i in 1:3 push!(b, [i, a[i]]) end
运行后得到的b与目标定义完全一致。
方式2:预分配外层长度后按索引赋值
如果需要按索引位赋值而非追加,先初始化长度为3的外层向量,每个位置预置空向量,再向内层追加元素:
# 注意不要写b = [[]]*3,会导致三个内层向量指向同一块内存,修改时全部联动 b = [[] for _ in 1:3] for i in 1:3 push!(b[i], i) push!(b[i], a[i]) end
运行结果同样符合要求。
内容的提问来源于stack exchange,提问作者A. T
相关产品推荐
相关产品推荐

