gpt4 book ai didi

生成器的python切片分配到列表

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:28 27 4
gpt4 key购买 nike

my_list = [1, 2]

def f():
print my_list
yield 11
print my_list
yield 22
print my_list

my_list[:] = f()

print "finally ",
print my_list

输出:

[1, 2]
[1, 2]
[1, 2]
finally [11, 22]

我的预期是:

[1, 2]
[11, 2]
[11, 22]
finally [11, 22]

有人曾经告诉我切片分配已经到位。很明显不是。有没有一种优雅的方式来实现它?

最佳答案

切片赋值是就地的,但在整个生成器被消耗之前不会发生赋值。它不会一次将一个元素分配给列表。它会读取所有内容,然后立即将它们全部粘贴到列表中。

(请注意,它必须这样做,因为即使序列的长度与原始切片的长度不同,您也可以将序列分配给切片。您可以这样做,例如,x[2:3] = [1, 2, 3, 4, 5, 6]. 没有办法通过一次替换一个元素来做到这一点,因为旧切片和新序列之间没有一对一的映射那正在取代它。)

没有一种方法可以通过切片分配来实现您想要的,因为切片分配总是以这种一次性完成的方式进行。您将不得不并行遍历列表和生成器,并一次替换一个单独的元素。

关于生成器的python切片分配到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11877212/

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