如何为另一个列表中的列表分配新值?
How to Assign new value to a list that is in another list?
我尝试了以下 python 代码来为列表分配新值。
a,b,c=[],[],[]
def change():
return [1]
for i in [a,b,c]:
i=change()
print(a)
输出是[]
,但我需要的是[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))
您创建了一个名为 i 的变量,并(依次)为它分配了 a、1、b、1、c、1。然后您打印了 a,没有改变。如果要改变a,需要赋值给a。即:
a = [1]
部分问题出在 for 循环中。你是说 i = 1,但它没有连接到任何列表。您的 for 循环应如下所示:
for i in [a, b, c]:
try:
i[0] = 1
except IndexError:
i.append(1)
你更愿意这样做:
a,b,c=[],[],[]
def change(p):
p.append(1)
for i in [a,b,c]:
change(i)
print(a)
您只是在更改变量 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)
有关详细信息,请阅读此 Whosebug answer on passing value by reference in python
函数内修改外部列表请参考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]
我尝试了以下 python 代码来为列表分配新值。
a,b,c=[],[],[]
def change():
return [1]
for i in [a,b,c]:
i=change()
print(a)
输出是[]
,但我需要的是[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))
您创建了一个名为 i 的变量,并(依次)为它分配了 a、1、b、1、c、1。然后您打印了 a,没有改变。如果要改变a,需要赋值给a。即:
a = [1]
部分问题出在 for 循环中。你是说 i = 1,但它没有连接到任何列表。您的 for 循环应如下所示:
for i in [a, b, c]:
try:
i[0] = 1
except IndexError:
i.append(1)
你更愿意这样做:
a,b,c=[],[],[]
def change(p):
p.append(1)
for i in [a,b,c]:
change(i)
print(a)
您只是在更改变量 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)
有关详细信息,请阅读此 Whosebug answer on passing value by reference in python
函数内修改外部列表请参考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]