为什么这不起作用?
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)。
答案 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]]