Python如何在循环中将列表b追加N次到列表a得到指定形状结果
Python实现(4,3)结构列表追加N次后生成(N+1,4,3)三维结构的方案
核心逻辑:先把原二维列表a封装为三维列表的第一个元素,再循环追加N次b即可,两种常用实现方式如下:
纯Python原生实现
# 初始化原始数据 a = [[0, 0, 0], [1, 0, 1], [1, 1, 0], [0, 1, 1]] b = [[2, 1, 0], [3, 0, 1], [4, 1, 0], [2, 1, 1]] N = 1 # 可自定义追加次数,比如改为5就是追加5次 # 生成目标结构 result = [a] for _ in range(N): # 若后续不需要修改b的内容直接append(b)即可 # 若需要每个b都是独立可修改的副本,引入copy模块调用append(copy.deepcopy(b)) result.append(b) # 验证N=1时的输出和预期一致 print(result) # 输出:[[[0, 0, 0], [1, 0, 1], [1, 1, 0], [0, 1, 1]], [[2, 1, 0], [3, 0, 1], [4, 1, 0], [2, 1, 1]]]
NumPy实现(适用于数值数组场景,大N下效率更高)
import numpy as np # 初始化原始数组 a = np.array([[0, 0, 0], [1, 0, 1], [1, 1, 0], [0, 1, 1]]) b = np.array([[2, 1, 0], [3, 0, 1], [4, 1, 0], [2, 1, 1]]) N = 1 # 生成目标三维数组 result = np.concatenate([ a[np.newaxis, :], # 给a升维为(1,4,3) np.tile(b[np.newaxis, :], (N, 1, 1)) # 把b复制N份,shape为(N,4,3) ], axis=0) # 验证结构 print(result.shape) # 输出(2, 4, 3),符合N=1时的要求
注意事项
- 纯Python场景下如果直接追加
b,所有追加的b都会指向同一个内存地址,修改任意一个追加的b内容会同步影响其他所有b,需要独立副本请使用copy.deepcopy(b)。 - 数值计算场景优先使用NumPy实现,避免循环开销,处理大规模数据效率提升明显。
内容的提问来源于stack exchange,提问作者Jeroen
相关产品推荐
相关产品推荐

