0

为什么这不起作用?

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)。

4

6 回答 6

2

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

于 2013-04-01T00:54:46.477 回答
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
于 2013-04-01T00:54:52.530 回答
1

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

在这种情况下,您首先将名称附加m0my_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
于 2013-04-01T00:59:22.860 回答
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
于 2013-04-01T01:33:23.843 回答
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
于 2013-04-01T00:58:17.943 回答
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]]
于 2013-04-01T01:07:03.330 回答