如何为另一个列表中的列表分配新值?

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,但实际上并没有更改 abc

例如,您希望以下源代码输出什么?

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]