具有相等边界的切片分配

时间:2019-07-25 22:29:02

标签: python slice

如果界限相等,则切片间隔为空,因此分配给它应该什么都不分配,并且列表应该保持不变,对吧?

>>> l = [0, 1, 2, 3]
>>> l[1:1]
[]   # (as expected)
>>> l[1:1] = [4]
>>> l
[0, 4, 1, 2, 3]
# why did 4 get in there?

2 个答案:

答案 0 :(得分:1)

TL; DR:将切片分配给空的切片间隔就像插入子列表一样。

我的解释(可能是错误的!):

切片分配是子列表的替换。子列表替换是先删除子列表,然后再插入子列表。如果要替换的子列表为空,则删除操作无效,因此将其替换为另一个子列表就像插入。

其他类型的空切片间隔

它们的工作原理似乎相同:

>>> l = [0, 1, 2, 3]

# bounds in the "wrong" order:

>>> l[1:0]
[]
>>> l[1:0] = [4]
>>> l
[0, 4, 1, 2, 3]

# bounds beyond the size of the list:

>>> l[20:100]
[]
>>> l[20:100] = [5]
>>> l
[0, 4, 1, 2, 3, 5]

答案 1 :(得分:1)

  

不分配任何内容,该列表应保持不变

不,它不会用值替代任何内容。以前,l[1]l[1]之间没有任何内容,现在有E。您也可以尝试

l = ['a', 'b', 'c', 'd']
l[1:3]='E'

这将导致l成为['a', 'E', 'd'],而不是['a', 'E', 'E', 'd']:将您所命名的切片替换为该值。如果您这样做

l = ['a', 'b', 'c', 'd']
l[1:2]=['E','F','G']

这将导致l['a', 'E', 'F', 'G', 'c', 'd']