如果界限相等,则切片间隔为空,因此分配给它应该什么都不分配,并且列表应该保持不变,对吧?
>>> 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?
答案 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']
。