基于分片的分配与基于索引的分配

时间:2019-06-28 22:29:34

标签: python python-3.x list slice

# Attempt1 using direct index-based assignment
p=[1,2,3,4]
p[1]=p[2]=[]
print(p) # [1, [], [], 4] 
// that sounds reasonable..


# Attempt2 using slice-based assignment
p=[1,2,3,4]
print(p[1:3]) # [2, 3]
p[1:3]=[] 
print(p) # [1, 4] !!

根据我的理解,从here中读取答案后,p [1:3]应该是一系列引用,应该在这些引用上进行对空列表的分配。但这似乎从列表中删除了元素! 几乎就好像我这样做了:

p=[1,2,3,4]
print(p) # [1, 2, 3, 4]
del p[1:3]
print(p) # [1, 4]

您能解释一下吗?

1 个答案:

答案 0 :(得分:1)

分配切片时,它将在两个列表之间执行逐元素分配。因此,如果您这样做:

list1[1:3] = [1, 2]

大致相当于:

list1[1] = 1
list1[2] = 2

但这仅在切片与源列表长度相同的情况下。

如果源列表较短,它将删除目标切片中的所有其他元素。如果源列表较长,则会在切片的末尾插入多余的元素。

因此,如果源列表为空(如您的代码中所示),则切片的所有元素均为“多余”,因此将从列表中删除切片。