【问题标题】:Python: Replacing an element in a list of lists (#2)Python:替换列表中的元素(#2)
【发布时间】:2010-10-04 11:39:17
【问题描述】:

以前的问题与我的has been posted 同名,(我认为)同样的问题,但代码中存在其他问题。我无法确定该案例是否与我的相同。

无论如何,我想在列表中替换列表中的元素。 代码:

myNestedList = [[0,0]]*4 # [[0, 0], [0, 0], [0, 0], [0, 0]]
myNestedList[1][1] = 5

我现在期望:

[[0, 0], [0, 5], [0, 0], [0, 0]]

但我明白了:

[[0, 5], [0, 5], [0, 5], [0, 5]]

为什么?

这是在命令行中复制的。 Python 3.1.2(r312:79147,2010 年 4 月 15 日,15:35:48) [GCC 4.4.3] 在 linux2 上

【问题讨论】:

标签: python list mutable


【解决方案1】:

您有四个 * 4 对同一对象的引用,请改用列表推导和范围进行计数:

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print(my_nested_list)

更具体地解释一下这个问题:

yourNestedList = [[0,0]]*4
yourNestedList[1][1] = 5
print('Original wrong: %s' % yourNestedList)

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print('Corrected: %s' % my_nested_list)

# your nested list is actually like this
one_list = [0,0]
your_nested_list = [ one_list for count in range(4) ]
one_list[1] = 5
print('Another way same: %s' % your_nested_list)

【讨论】:

  • +1。起初这可能令人困惑。解释和解决都很好。
猜你喜欢
  • 1970-01-01
  • 2018-01-11
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多