gpt4 book ai didi

python追加2d列表不能按预期工作,这是一个错误吗?

转载 作者:行者123 更新时间:2023-12-01 08:03:17 24 4
gpt4 key购买 nike

我在将列表 append 到二维列表时遇到问题。在下面的代码中,如果我将 b.append(a) 更改为 b.append([*a]) 一切正常!但是 a[*a] 不是一样吗?

a = ['1', '1', '1']
b = []

def call_other(ar):
a[0], a[1], a[2] = ar[0], ar[1], ar[2]
print('a is', a)
b.append(a)
print('b is', b)
print()

def lop():
for i in range(5):
c = ['0', '1', '1']
if i > 1:
c = ['1', '0', '1']
call_other(c)

lop()
print('final b:', b)

输出为:

a is ['0', '1', '1']
b is [['0', '1', '1']]

a is ['0', '1', '1']
b is [['0', '1', '1'], ['0', '1', '1']]

a is ['1', '0', '1']
b is [['1', '0', '1'], ['1', '0', '1'], ['1', '0', '1']]

a is ['1', '0', '1']
b is [['1', '0', '1'], ['1', '0', '1'], ['1', '0', '1'], ['1', '0', '1']]

a is ['1', '0', '1']
b is [['1', '0', '1'], ['1', '0', '1'], ['1', '0', '1'], ['1', '0', '1'], ['1', '0', '1']]

final b: [['1', '0', '1'], ['1', '0', '1'], ['1', '0', '1'], ['1', '0', '1'], ['1', '0', '1']]

最佳答案

以下两段代码之间存在根本区别:

a = [1, 1, 1]
b.append(a)
a[0] = 0
b.append(a)

a = [1, 1, 1]
b.append([*a])
a[0] = 0
b.append([*a])

在第一种情况下,您每次都会向 b append 相同的引用。当您使用 a[0] = 0 修改原始列表 a 的元素时,对该列表的所有引用都将看到更改。因此,b 将是 [[0, 1, 1], [0, 1, 1]],而不是 [[1, 1, 1], [ 0, 1, 1]].

在第二种情况下,[*a] 创建一个新列表,其中包含 a 的所有元素的副本。当您更新原始列表时,b 中已有的引用不会指向同一列表,因此保持不变。这就是为什么 b 将是 [[1, 1, 1], [0, 1, 1]]

关于python追加2d列表不能按预期工作,这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55644544/

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