gpt4 book ai didi

python - 为什么所有列表元素中的值都重复?

转载 作者:行者123 更新时间:2023-12-04 02:32:14 25 4
gpt4 key购买 nike

我有一个具有以下结构的列表:

l = [[[],0]] * 5

列表中的每个节点都包含另一个列表:

  • 内部列表中的第一个元素包含另一个列表
  • 内部列表中的第二个元素包含 wight

我正在尝试为内部列表添加值:

index = 0
l[index][0].append('s')

但它添加了值 's'到所有列表 ( l ) 值:

l = [[['s'],0], [['s'],0], [['s'],0], [['s'],0], [['s'],0]]
  • 为什么值“s”会重复到所有列表元素?
  • 如何将值“s”仅添加到第一个内部列表(即l = [[['s'],0], [[],0], [[],0], [[],0], [[],0]])

Python 3.6.8

最佳答案

问题出在语句的 * 5 部分,因为它生成同一列表对象的 5 个别名,而不是 5 个不同的列表实例。您可以想象您的语句等效地写成如下:

a = [[],0]
l = [a,a,a,a,a]

这遵循语句的求值顺序,并且更明显地表明列表 l 实际上是 5 个别名的列表。

用推导式替换 l 的定义可以修复该问题:

l = [[[],0] for _ in range(5)]

在推导式中,range上的循环确保在每个位置创建一个新实例(例如,检查l[0]不是l[1]),以便追加可以按您期望的方式工作:

l[0][0].append(1)
print(l)

打印

[[[1], 0], [[], 0], [[], 0], [[], 0], [[], 0]]

关于python - 为什么所有列表元素中的值都重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63593070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com