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

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

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

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

【讨论】:

以上是关于如何为另一个列表中的列表分配新值?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 TPL 中的任务分配名称

当分配规则存储在另一个tibble中时,如何用新值替换tibble中的数据?

在 for 循环期间为列表中的项目分配新值不起作用?

我应该如何为精灵表中的精灵分配名称?

如何为多对多关系创建 UI?

如何为 Yii 中的每个按钮分配动作?