【问题标题】:Looping through list and changing list values [duplicate]遍历列表并更改列表值[重复]
【发布时间】:2018-08-07 14:11:02
【问题描述】:

我必须遍历给定的列表并修改其元素。

list1 = [[0, 0, 0, 0]] * 10
for i in range(len(list1)):
    for j in range(0, 10):
        list1[i][1] = j
print(list1)

#output:[[0, 9, 0, 0], [0, 9, 0, 0], [0, 9, 0, 0], [0, 9, 0, 0], [0, 9, 0, 0], [0, 9, 0, 0], [0, 9, 0, 0], [0, 9, 0, 0], [0, 9, 0, 0], [0, 9, 0, 0]]

#But I want the output to be: [[0, 0, 0, 0], [0, 1, 0, 0], [0, 2, 0, 0], [0, 3, 0, 0], [0, 4, 0, 0], [0, 5, 0, 0], [0, 6, 0, 0], [0, 7, 0, 0], [0, 8, 0, 0], [0, 9, 0, 0]]

我需要了解为什么我的代码会给出不同的输出。如果您能向我解释为什么会这样,将会很有帮助。

【问题讨论】:

  • list1[i][1] = j 不应该是 list1[j][1] = j 吗?此外,如果您只想更改指定子列表的 1 个位置,则不需要迭代 2 次 - 具有此类更改的第二个 for 就足够了。
  • 另外,您可能想看看this thread
  • 我试过 list1[j][i] = j 但输出是一样的

标签: python list loops nested-loops nested-lists


【解决方案1】:

这应该可行:

In [21]: [[0, i, 0, 0] for i in range(10)]
Out[21]: 
[[0, 0, 0, 0],
 [0, 1, 0, 0],
 [0, 2, 0, 0],
 [0, 3, 0, 0],
 [0, 4, 0, 0],
 [0, 5, 0, 0],
 [0, 6, 0, 0],
 [0, 7, 0, 0],
 [0, 8, 0, 0],
 [0, 9, 0, 0]]

...或者这里有一个更详细的版本:

result = []
for i in range(10):
    result.append([0, i, 0, 0])
print(result)

【讨论】:

  • 嗯,你更快^^
  • 谢谢!您能否详细说明我的代码给出不同输出的原因?
  • 对于每个i 值,您遍历所有j 值并一个接一个地分配list1[i][1]。所以只有最后一个赋值才是真正重要的,因为这个内部循环中的每一步都超过了最后一步。
  • 是的,没错!谢谢
猜你喜欢
  • 2020-05-30
  • 2014-07-06
  • 1970-01-01
  • 2016-05-02
  • 2022-01-18
  • 2015-09-21
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多