为什么
a[len(a):] = [x]
等同于a.append(x)
,但是a[len(a)] = [x]
会导致“超出范围”的错误?a[len(a):] = [x]
等同于a.append(x)
,但是a[len(a)] = [x]
会导致“超出范围”的错误?这是语言所做的明确选择:对索引进行赋值需要这些索引存在。对切片进行赋值将根据需要扩展或收缩列表以适应新的大小。
Python 的切片(slicing)通常比使用数字进行索引更加“宽容”(这是设计上的考虑)。例如:
lst = []
lst[1:100] # No exception here.
我认为切片赋值的情况只是这种“宽容性”的扩展。有趣的是,你甚至可以使用远超范围的索引:
a = []
a[100:101] = ['foo']