如何让array2的行列依赖字符串长度,匹配array1的嵌套格式?
实现与array1结构一致的三维array2
要让array2的行列数由str1和str2的长度决定,同时和array1的三维嵌套格式保持一致,你需要修正列表推导式的变量引用和元素获取逻辑,具体如下:
问题分析
你之前的temp推导式存在两个核心问题:
- 变量不匹配:循环用
x和y,但内部错误引用未定义的i和j - 元素获取错误:
array2[i]会取整行数据,而非对应行列的单个元素,导致结构完全不符合预期
正确实现代码
str1 = "Hi" str2 = "Bye" array1 = [[[0, 0] for y in range(len(str2)+1)] for x in range(len(str1)+1)] print("array1结构:") print(array1) array2 = [[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5]] # 转换为与array1一致的三维结构 array2_3d = [[[array2[x][y], array2[x][y]] for y in range(len(str2)+1)] for x in range(len(str1)+1)] print("\n转换后的array2结构:") print(array2_3d)
输出结果
array1结构: [[[0, 0], [0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0], [0, 0]]] 转换后的array2结构: [[[0, 0], [1, 1], [2, 2], [3, 3]], [[1, 1], [2, 2], [3, 3], [4, 4]], [[2, 2], [3, 3], [4, 4], [5, 5]]]
逻辑说明
- 外层循环
range(len(str1)+1):控制三维数组的行数,和array1保持一致 - 中层循环
range(len(str2)+1):控制每行的列数,和array1保持一致 - 最内层
[array2[x][y], array2[x][y]]:将array2对应位置的单个元素包装成和array1相同的双元素列表结构
如果你的需求是最内层仅包含单个元素(而非双元素),只需把最内层改为[array2[x][y]]即可,结构依然和array1的嵌套层数一致。
内容的提问来源于stack exchange,提问作者Janne
相关产品推荐
相关产品推荐

