STU*_*STU 2 python arrays multidimensional-array
我对多维Python"数组"(实际上是列表列表,而不是numpy数组)的行为有点困惑.假设我有一个4 x 4阵列,其条目是1 x 2阵列(也就是说,4 x 4阵列的条目是包含2个列表的列表).我可以使用以下命令初始化这样一个空数组:
b = [[[[], ]*2, ]*4, ]*4
Run Code Online (Sandbox Code Playgroud)
这将创建以下多维空数组:
[[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]]]
Run Code Online (Sandbox Code Playgroud)
现在我想修改这个4 x 4阵列的单个条目; 例如,我想使组件b[0][0]等于[[1],[2]]:
[[[[1], [2]], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]],
[[[], []], [[], []], [[], []], [[], []]]]
Run Code Online (Sandbox Code Playgroud)
我的期望是以下命令可以完成这项工作:
b[0][0] = [[1],[2]]
Run Code Online (Sandbox Code Playgroud)
但是,这会导致以下矩阵b:
[[[[1], [2]], [[], []], [[], []], [[], []]],
[[[1], [2]], [[], []], [[], []], [[], []]],
[[[1], [2]], [[], []], [[], []], [[], []]],
[[[1], [2]], [[], []], [[], []], [[], []]]]
Run Code Online (Sandbox Code Playgroud)
实现这个目标的正确方法是什么?
当你这样做时,问题确实存在
b = [[[[], ]*2, ]*4, ]*4
Run Code Online (Sandbox Code Playgroud)
您正在复制对相同数组的引用,因此新的大型多维数组包含对同一数组的许多引用.
这是iPython的一个例子:
In [22]: a = [[],]*10
In [23]: a
Out[23]: [[], [], [], [], [], [], [], [], [], []]
In [24]: a[1].append(12)
In [25]: a
Out[25]: [[12], [12], [12], [12], [12], [12], [12], [12], [12], [12]]
Run Code Online (Sandbox Code Playgroud)
为了更好地创建阵列,请转到此处
可能解决您想要的问题:
m = [[[[] for x in range(2)] for x in range(4)] for x in range(4)]
Run Code Online (Sandbox Code Playgroud)