基于切片的作业与基于索引的作业


# 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] !!

在阅读此处的答案后,P [1:3]应该是一系列参考,应该在该参考文献中进行分配到空列表。但这似乎可以从列表中删除元素!几乎好像,我这样做了:

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

您能解释一下吗?

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

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

它大致相当于:

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

但是,仅当切片与源列表相同时。

如果源列表较短,则删除目标切片中的任何额外元素。如果源列表更长,它将插入切片末端的额外元素。

因此,如果源列表为空,则如您的代码中所示,切片的所有元素均为" extra",因此将切片从列表中删除。

最新更新