gpt4 book ai didi

python - 将生成器中的项目附加到 Python 列表时出现奇怪的外观

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:36 26 4
gpt4 key购买 nike

我试图使用下面的代码生成一个 p 级帕斯卡三角形:

def triangles(p):
L = [1]
count = 0
while count < p:
yield L
L.append(0)
L = [L[i - 1] + L[i] for i in range(len(L))]
count = count + 1
def pascal(p):
result = []
t = triangles(p)
for i in range(p):
result.append(next(t))
return result

pascal(5) 的预期结果应为 [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4 ,1]],但我得到了 [[1, 0], [1, 1, 0], [1, 2, 1, 0], [1, 3, 3, 1, 0], [1, 4, 6, 4, 1, 0]] 代替。

我尝试打印三角形中的每个 i(5),

for i in triangles(5):
print i

结果是:

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]

然后我尝试了:

result = []
for i in triangles(5):
print result
print i
result.append(i)
print result

输出如下:

[] # result in step 1, before append
[1] # 1st item in triangles(5)
[[1]] # result in step 1, after append
[[1, 0]] # result in step 2, before append, here's where it changes
[1, 1]
[[1, 0], [1, 1]]
[[1, 0], [1, 1, 0]]
[1, 2, 1]
[[1, 0], [1, 1, 0], [1, 2, 1]]
[[1, 0], [1, 1, 0], [1, 2, 1, 0]]
[1, 3, 3, 1]
[[1, 0], [1, 1, 0], [1, 2, 1, 0], [1, 3, 3, 1]]
[[1, 0], [1, 1, 0], [1, 2, 1, 0], [1, 3, 3, 1, 0]]
[1, 4, 6, 4, 1]
[[1, 0], [1, 1, 0], [1, 2, 1, 0], [1, 3, 3, 1, 0], [1, 4, 6, 4, 1]]

为什么追加会改变列表中先前的值?

最佳答案

L.append(0) 在生成列表后会更改列表,因为 python 中的对象是共享的。

尝试

L = L + [0]

相反,创建一个新列表而不是就地更改它。

关于python - 将生成器中的项目附加到 Python 列表时出现奇怪的外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43404303/

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