【问题标题】:Why is this slice assignment not raising an error? [duplicate]为什么这个切片分配没有引发错误? [复制]
【发布时间】:2021-04-10 18:35:21
【问题描述】:

给定表达式:

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

为什么 Python 不唠叨那些要删除的不存在的项目? l.remove(55) 确实会引发 ValueError。

【问题讨论】:

  • 你的问题不是很清楚。您的代码正在向列表中添加元素,但您要求 l.remove
  • @ltaljuk:是的,我假设切片分配是一种删除+插入元素。 l[0:2] = [4,5] 会删除 1,2。
  • Python 优雅地处理切片索引,因此"Hello World"[6:15] 不会引发错误,而只会评估为"World"docs.python.org/3.0/tutorial/introduction.html :“退化的切片索引被优雅地处理:一个太大的索引被字符串大小替换,一个小于下限的上限返回一个空字符串。”

标签: python error-handling


【解决方案1】:

l.remove(55) 引发错误,因为您的列表中没有值 55。

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

另外,如果您尝试执行(例如)l[10]=10,这将引发异常:IndexError: list index out of range

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多