我有一个带有值的 Python 列表,例如:
a = [[0, 0, 0], [1, 0, 1], [1, 1, 0], [0, 1, 1]]
我想在循环中将新列表“b” append 到列表“a”。
b = [[2, 1, 0], [3, 0, 1], [4, 1, 0], [2, 1, 1]]
结果应如下所示(将“b”添加到“a”时):
[[[0, 0, 0], [1, 0, 1], [1, 1, 0], [0, 1, 1]], [[2, 1, 0], [3, 0, 1], [4, 1, 0], [2, 1, 1]]]
现在,我想将列表 b
添加到列表 a
中 N 次。
a
和 b
的形状都是 (4,3)
结果应具有以下形状:(N+1,4,3)
我该怎么做?
最佳答案
native Python 列表不会按照您在此处期望的方式运行,如一些评论中所述,因此如果您可以使用第 3 方库,请考虑 NumPy ,它的行为更像您期望的值矩阵,然后可以转换回 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]]
垂直复制b
np.tile()
的第二个参数描述了每个维度的复制.reshape()
将其准备为 3 维数组
>>> import numpy as np
>>> b_tiled = np.tile(np.array(b), (4,1)).reshape(4,4,3)
>>> b_tiled
array([[[2, 1, 0],
[3, 0, 1],
[4, 1, 0],
[2, 1, 1]],
[[2, 1, 0],
[3, 0, 1],
[4, 1, 0],
[2, 1, 1]],
[[2, 1, 0],
[3, 0, 1],
[4, 1, 0],
[2, 1, 1]],
[[2, 1, 0],
[3, 0, 1],
[4, 1, 0],
[2, 1, 1]]])
将a
和b_tiled
收集到同一个数组中
注意 a
应该 reshape 或 [a]
以匹配 b_tiled
>>> np.vstack((np.array([a]), b_tiled))
array([[[0, 0, 0],
[1, 0, 1],
[1, 1, 0],
[0, 1, 1]],
[[2, 1, 0],
[3, 0, 1],
[4, 1, 0],
[2, 1, 1]],
[[2, 1, 0],
[3, 0, 1],
[4, 1, 0],
[2, 1, 1]],
[[2, 1, 0],
[3, 0, 1],
[4, 1, 0],
[2, 1, 1]],
[[2, 1, 0],
[3, 0, 1],
[4, 1, 0],
[2, 1, 1]]])
.tolist()
您可以使用 .tolist()
再次制作原生 Python 列表,尽管它作为 numpy 数组对您来说可能更方便
>>> np.vstack((np.array([a]), b_tiled)).tolist()
[[[0, 0, 0], [1, 0, 1], [1, 1, 0], [0, 1, 1]], [[2, 1, 0], [3, 0, 1], [4, 1, 0], [2, 1, 1]], [[2, 1, 0], [3, 0, 1], [4, 1, 0], [2, 1, 1]], [[2, 1, 0], [3, 0, 1], [4, 1, 0], [2, 1, 1]], [[2, 1, 0], [3, 0, 1], [4, 1, 0], [2, 1, 1]]]
关于python - 将列表 append 到循环中的列表 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69018653/