如何为另一个列表中的列表分配新值?
Posted
技术标签:
【中文标题】如何为另一个列表中的列表分配新值?【英文标题】:How to Assign new value to a list that is in another list? 【发布时间】:2019-12-26 07:06:16 【问题描述】:我尝试使用以下 python 代码为列表分配新值。
a,b,c=[],[],[]
def change():
return [1]
for i in [a,b,c]:
i=change()
print(a)
输出是[]
,但我需要的是[1]
【问题讨论】:
你真的应该阅读这个:nedbatchelder.com/text/names.html python; modifying list inside a function的可能重复 【参考方案1】:您在这里所做的是在循环中重新分配变量i
,但实际上并没有更改a
、b
或c
。
例如,您希望以下源代码输出什么?
a = []
i = a
i = [1]
print(a)
在这里,您在将a
分配给它之后重新分配i
。当您执行i = [1]
操作时,a
本身不会发生变化,因此会输出[]
。此问题与您在循环中看到的问题相同。
你可能想要这样的东西。
a, b, c = (change() for i in (a, b, c))
【讨论】:
【参考方案2】:函数内部修改外部列表请参考this answer。
In [45]: a,b,c=[],[],[]
...: def change():
...: return [1]
...: for i in [a,b,c]:
...: i[:]=change()
...: print(a)
...: print(b)
[1]
[1]
【讨论】:
【参考方案3】:您创建了一个名为 i 的变量,然后为它分配(依次)a,然后是 1,然后是 b,然后是 1,然后是 c,然后是 1。然后您打印 a,原样。如果要更改a,则需要分配给a。那就是:
a = [1]
【讨论】:
【参考方案4】:您的部分问题在您的 for 循环中。你说 i = 1,但它没有连接到任何列表。你的 for 循环应该是这样的:
for i in [a, b, c]:
try:
i[0] = 1
except IndexError:
i.append(1)
【讨论】:
【参考方案5】:你宁愿这样做:
a,b,c=[],[],[]
def change(p):
p.append(1)
for i in [a,b,c]:
change(i)
print(a)
【讨论】:
【参考方案6】:您只是更改变量i
。您没有更改原始列表变量:a, b, c
。
在 For 循环中,变量i
被分配了a, b, c
的引用副本。它完全是一个不同的变量。更改i
的值不会更改a, b, c
的值。
如果你想真正改变a、b、c的值,你必须使用append
方法。
a,b,c=[],[],[]
def change():
return [1]
for i in [a,b,c]:
i.append(change())
print(a)
欲了解更多信息,请阅读此*** answer on passing value by reference in python
【讨论】:
以上是关于如何为另一个列表中的列表分配新值?的主要内容,如果未能解决你的问题,请参考以下文章