为什么这个切片赋值语句没有引发错误?

3

给定下列表达式:

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

为什么Python不会提醒要删除的不存在的项目?l.remove(55)会引发ValueError异常。

你的问题不是很清楚。你的代码正在向列表中添加元素,但你正在要求删除l。 - ljuk
@ltaljuk:是的,我问的时候假设切片赋值是一种删除+插入元素的方式。l[0:2] = [4,5] 将会删除 1,2。 - Quora Feans
Python优雅地处理切片索引,因此"Hello World"[6:15]不会引发错误,而只是计算为"World"。 https://docs.python.org/3.0/tutorial/introduction.html: “退化的切片索引被优雅地处理:如果索引过大,则被替换为字符串大小;如果上限小于下限,则返回空字符串。” - Christoph
1个回答

1

l.remove(55) 报错是因为您的列表中不存在值为55的元素。

另一方面,l[10:20] = [4,5] 不会崩溃您的代码,因为这种 切片 方法将尝试在这些索引上添加元素,如果无法添加,它将在数组的最后位置添加新元素。

此外,如果您尝试执行(例如)l[10]=10,则会引发以下异常:IndexError: list index out of range


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接