# 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]
您能解释一下吗?
答案 0 :(得分:1)
分配切片时,它将在两个列表之间执行逐元素分配。因此,如果您这样做:
list1[1:3] = [1, 2]
大致相当于:
list1[1] = 1
list1[2] = 2
但这仅在切片与源列表长度相同的情况下。
如果源列表较短,它将删除目标切片中的所有其他元素。如果源列表较长,则会在切片的末尾插入多余的元素。
因此,如果源列表为空(如您的代码中所示),则切片的所有元素均为“多余”,因此将从列表中删除切片。