【问题标题】:python setting value to list elementspython设置值以列出元素
【发布时间】:2013-03-27 06:56:38
【问题描述】:

基本上我要做的是,创建一个嵌套列表并将其元素之一的值设置为列表中其他元素的函数。

>>> a = [[1]*5]*5
>>> a
[[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]
>>> a[2][2] = a[0][2] + a[2][1]
>>> a
[[1, 1, 2, 1, 1], [1, 1, 2, 1, 1], [1, 1, 2, 1, 1], [1, 1, 2, 1, 1], [1, 1, 2, 1, 1]]
>>> a[3][2]   
2
>>> a[4][2]
2
>>> a[4][4]
1

我只是设置了 a[2][2] 的值,但是第三列中的每个元素都设置了相同的值。到底发生了什么,我怎样才能得到想要的行为?

【问题讨论】:

    标签: list python-2.7 indexing


    【解决方案1】:

    发生的情况是a 最终包含对同一子列表的五个引用。当您更改一个子列表时,它们都会发生变化。

    要查看此内容,请将id() 应用于每个子列表:

    >>> map(id, a)
    [8189352, 8189352, 8189352, 8189352, 8189352]
    

    如您所见,它们都具有相同的 ID,这意味着它们是同一个对象。

    要修复,替换

    a = [[1]*5]*5
    

    a = [[1]*5 for _ in range(5)]
    

    现在子列表是独立的对象:

    >>> map(id, a)
    [21086256, 18525680, 18524720, 19331112, 18431472]
    

    【讨论】:

      【解决方案2】:

      问题是您的列表a 包含对同一列表的五个引用。你需要做这样的事情:

      a = []
      for _ in range(5):
          a += [[1] * 5]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        相关资源
        最近更新 更多