【发布时间】:2020-06-30 07:35:30
【问题描述】:
我有以下列表
I=[[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]]
我想根据另一个列表 S 的索引将列表 I 中 0 的一些元素替换为 1
S=[2,2,1]
请注意: 列表 S 中的第一个元素对应于列表 I 中的第一列, 列表 S 中的第二个元素对应于列表 I 中的第二列 列表 S 中的第 3 个元素对应于列表 I 中的第 3 列
这样的输出
IS=[[[1, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 1, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [1, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 1, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [1, 0, 0]]]
我想要得到的输出如下: 从 colmn1 开始,它对应于列表 S 中的第一个元素,因为 S[0]=2 ,我们访问列表 I 的 colmn1 中的前两行,并将 0 替换为对角线的 1。 然后我们得到
colmn1 colmn2 colmn3
[[**1, 0, 0]**, [0, 0, 0], [0, 0, 0]], row 1
[**[0, 1, 0]**, [0, 0, 0], [0, 0, 0]], row 2
然后移动到与列表 I 中的 colmn2 对应的 S 的第二个元素,因为 S[1]= 2 然后我们访问 colmn2 中的接下来的两行并在接下来的两行中对角替换 0 元素。
colmn1 colmn2 colmn3
[[1, 0, 0], [0, 0, 0], [0, 0, 0]], row 1
[[0, 1, 0], [0, 0, 0], [0, 0, 0]], row 2
[[0, 0, 0], **[1, 0, 0]**, [0, 0, 0]], row 3
[[0, 0, 0], **[0, 1, 0]**, [0, 0, 0]], row 4
最后,转到 S 中的最后一个元素(对应于列表 I 中的最后一个列),因为我们有 S[2]=1,因此我们访问下一行并将对角线方向上的 0 替换为 1 得到
colmn1 colmn2 colmn3
[[1, 0, 0], [0, 0, 0], [0, 0, 0]], row 1
[[0, 1, 0], [0, 0, 0], [0, 0, 0]], row 2
[[0, 0, 0], [1, 0, 0], [0, 0, 0]], row 3
[[0, 0, 0], [0, 1, 0], [0, 0, 0]], row 4
[[0, 0, 0], [0, 0, 0], **[1, 0, 0]**], row 5
希望解释清楚
【问题讨论】:
-
@A Azab 你能解释一下输出部分吗?看起来不清楚
-
@PythonBang 我希望现在清楚了,谢谢
标签: python list for-loop replace