gpt4 book ai didi

python - python如何在LHS上做列表切片和修改?

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:38 25 4
gpt4 key购买 nike

我知道 ww 语法是如何工作的,但我想知道 python 如何替换和更改左侧列表的过程。例如。

L = [0, 1, 2, 3, 4]
L[0:2] = [5]
print L #L is now [5, 2, 3, 4]

python 是如何做到这一点的?

最佳答案

这是通过 __setitem____setslice__ 方法完成的。 (__setslice__ 已弃用 IIRC 并在 python3.x 中删除)。

对于列表,表达式:

L[start: stop] = some_iterable

将从 some_iterable 中获取项目并从开始到停止(不包含)替换索引处的元素。因此,在您的演示代码中,您有:

L[0:2] = [5]

这会获取索引 01 处的元素,并将它们替换为 5

请注意,替换列表的长度不需要与其要替换的子列表的长度相同。

也许更好的理解方式是将其视为执行以下操作的就地方法:

L[a:b] = c

# equivalent to the following operation (done in place)
L[:a] + list(c) + L[b:]

如果您真的很好奇它是如何发生的,源代码是最好的引用。 PyList_SetSlice电话 list_ass_slice它将右侧的 iterable 变成一个序列 (tuple or list IIRC) 。它调整数组的大小以容纳适当数量的数据,将切片右侧的内容复制到适当的位置,然后复制新数据。根据列表是增长还是收缩,有一些不同的代码路径(和操作顺序),但这就是它的基本要点。

关于python - python如何在LHS上做列表切片和修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36561096/

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