【问题标题】:how to change values of a list based on index of another list in python?如何根据python中另一个列表的索引更改列表的值?
【发布时间】: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


【解决方案1】:

你可以使用:

cols = zip(*I)

offset = 0
for l, n in zip(cols, S):
    for i in range(n):
        l[offset][i] = 1
        offset += 1

print(I)

输出:

[[[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]]]

【讨论】:

    猜你喜欢
    • 2021-05-13
    • 2021-11-19
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2013-10-05
    • 2019-08-20
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多