为什么我不能更改列表中的列表?

时间:2013-04-01 00:48:37

标签: python list python-2.7

为什么这不起作用?

In [28]: my_list_o_lists = [ [], ["cow", "says", "moo"], [1, 2, 3] ]

In [29]: print(my_list_o_lists)
[[], ['cow', 'says', 'moo'], [1, 2, 3]]

In [30]: m0 = my_list_o_lists[0]

In [31]: m0 = [ "Where is my cow?", "No idea!" ]

In [32]: print(my_list_o_lists)
[[], ['cow', 'says', 'moo'], [1, 2, 3]]

我想将列表中的第一项更改为第31行中发布的另一个列表。但它不起作用。非常困惑和谷歌搜索没有帮助。

我在python 2.7.3上(在上面的例子中使用ipython 0.13.1)。

6 个答案:

答案 0 :(得分:2)

您不更改列表,将m0名称重新绑定到新列表。要更改列表,您需要更改其内容(例如m0.append(''))或将my_list_o_lists[0]替换为新列表(例如my_list_o_lists[0] = [''])。

答案 1 :(得分:1)

m0是一个变量,而不是指向my_list_o_lists的索引0的指针。更改m0不会影响my_list_o_lists。 如果要替换my_list_o_lists [0],则需要执行

my_list_o_lists[0] = m0

完整代码应如下所示:

my_list_o_lists = [ [], ["cow", "says", "moo"], [1, 2, 3] ]
m0 = [ "Where is my cow?", "No idea!" ] # Assigning value to variable m0
my_list_o_lists[0] = m0                 # Assigning value of m0 to list index 0

答案 2 :(得分:1)

问题与您正在使用的变量m0有关。在Python中,变量只是一个附加到对象的名称。如果分配给变量,则只需将名称附加到其他对象。

在这种情况下,您首先将名称m0附加到my_list_o_lists[0]中的对象。然后在下一步中,您将名称重新绑定到新的列表对象。这不会使原始对象(仍然在my_list_o_lists中)消失,也不会改变原始对象。仅移动名称m0

如果您想解决问题,则需要执行以下两项操作之一。要么直接重新分配my_list_o_lists[0]的内容:

my_list_o_lists[0] = [ "Where is my cow?", "No idea!" ]

或者,修改现有列表,而不是替换它:

m0 = my_list_o_lists[0]
m0[:] = [ "Where is my cow?", "No idea!" ] # slice assignment reuses the list

答案 3 :(得分:1)

这是因为m0的值为my_list_o_lists[0],但不是对它的引用。
因此,操纵m0不会影响my_list_o_lists[0] 见:

>>> my_list_o_lists = [ [], ["cow", "says", "moo"], [1, 2, 3] ]
>>> m0 = my_list_o_lists[0]
>>> m0 = [ "Where is my cow?", "No idea!" ]
>>> print m0
['Where is my cow?', 'No idea!']
>>> print my_list_o_lists[0]
[]

要解决此问题,只需操纵my_list_o_lists[0]而不是操纵m0 否则,您可以操纵m0,并为其指定值my_list_o_lists[0] 类似的东西:

>>> my_list_o_lists[0] = m0

答案 4 :(得分:0)

仅当整个列表分配给另一个时,两个变量名称才指向单个列表。例如)

a=[1,2,3,4]
b=a
b.append(10)
print a

输出

[1,2,3,4,10]

但是由于您只分配列表中的单个元素,因此新变量指向不同的地址,因此更改不起作用。所以使用

my_list_o_lists[0]=['']

试试这个

a=[[],[],[]]
b=a
b[0]=[1,2,3,4]
print a

答案 5 :(得分:0)

你有点不按规定。尝试这样的事情:

>>> m0=['Where is my cow?', 'No idea!']
>>> LoL=[ [], ["cow", "says", "moo"], [1, 2, 3] ]
>>> LoL[0]=m0
>>> LoL
[['Where is my cow?', 'No idea!'], ['cow', 'says', 'moo'], [1, 2, 3]]

或者:

>>> LoL=[m0, ["cow", "says", "moo"], [1, 2, 3] ]
>>> LoL
[['Where is my cow?', 'No idea!'], ['cow', 'says', 'moo'], [1, 2, 3]]