gpt4 book ai didi

Python 追加并生成列表

转载 作者:行者123 更新时间:2023-11-28 22:41:33 25 4
gpt4 key购买 nike

这是怎么回事?为什么 list(f(seq)) 返回的不是 f 生成的元素列表?

>>> def f(seq):
... a = []
... for i in seq:
... yield a
... a.append(i)
...
>>> f([1,2,3])
<generator object f at 0x1066c7aa0>
>>> b = f([1,2,3])
>>> b.next()
[]
>>> b.next()
[1]
>>> b.next()
[1, 2]
>>> b.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> list(f([1,2,3]))
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

最佳答案

您已经在函数内生成了对列表 a 的完整引用。当 list(f([1,2,3])) 被调用时,结果就是 [a, a, a] 的最终形式a[1, 2, 3]

如果您保存了 f.next() 调用的所有结果,这并没有什么不同。

>>> v1 = b.next()
>>> v2 = b.next()
>>> v1
[1]
>>> v2
[1]
>>> v3 = b.next()
>>> v4 = b.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> v1
[1, 2, 3]

同样,这是正确的,因为生成了 a 并且是对函数 f 中相同内部列表的相同引用。

关于Python 追加并生成列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32514807/

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