gpt4 book ai didi

python - 带有空列表的切片分配 - 为什么?

转载 作者:行者123 更新时间:2023-12-01 09:01:05 37 4
gpt4 key购买 nike

我有一个问题。恐怕这对你来说是显而易见的,但目前我不太明白。

我刚刚阅读了切片分配以及空列表的分配如何像删除项目一样工作,例如:

>> L=['a','b','c','d']
>> L[2:3] = []
>> L
['a', 'b', 'd']

但我的问题是 - 更多地期待这个输出不是更合乎逻辑吗?

['a', 'b', [], 'd']

如果我的代码如下所示,我知道上面的输出将为 true:

>> L=['a','b','c','d']
>> L[2:3] = [[]]
>> L

但为什么它是这样构造的,而不是像 f.e.:

>> L=['a','b','c','d']
>> L[2:3] = None
>> L

它对我来说看起来过于复杂,因为我希望当我进行切片分配时,我不希望在这种情况下它会改变我的列表的长度,或者也许我只想删除切片并启动一个空的同时列出。

编辑:我不知道我是否足够清楚 - 我不明白为什么 - 在进行切片分配时 - python 解释器删除列表中的一个项目,而不是将此项目更改为空列表。

最佳答案

我认为造成困惑的原因是您确实在切片而不是索引。观察:

>>> L = ['a','b','c','d']
>>> L[2] = []
>>> L
['a', 'b', [], 'd']

请注意,就 2-3 的范围为 2 而言,L[2:3]L[2]“相同”(因为切片是不包括)。但是,切片和索引是两种不同的行为,因为切片可以更改列表的长度,而索引只是修改现有元素。

<小时/>

空列表以这种方式工作的原因是切片分配的工作方式。当您分配给切片时,Python 会解压您提供的内容并将其结果存储到索引中。观察:

>>> L = ['a', 'b', 'c', 'd']
>>> L[2:4] = 'e'
>>> L
['a', 'b', 'e']
>>> L = ['a', 'b', 'c', 'd']
>>> L[2:4] = 'efgh'
>>> L
['a', 'b', 'e', 'f', 'g', 'h']

L[2:4] = 'e'L[2:4] = ['e'] 在 Python 中的行为是相同的,因为Python 中字符串的行为:它们可以被迭代并因此被解包。

因此,当您输入 L[2:4] = [] 时,它将解压 [] 的所有元素,并将其内容分配到索引 2 和 3 中。当然,由于没有元素,它会将它们分配给任何内容(注意:与 None"" 不同 - 字面上什么都没有),因此被删除。

关于python - 带有空列表的切片分配 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52452462/

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