例1中,L[0:2:1]可以用[99,99,99,99,99]赋值
# example1:
L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L[0:2:1] = [99,99,99,99,99]
print(L)
#output: [99, 99, 99, 99, 99, 2, 3, 4, 5, 6, 7, 8, 9]
但是 example2,L[-1:-2:-1] 不能通过 [99,99,99,99,99] 分配
# example2:
L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L[-1:-2:-1] = [99,99,99,99,99]
print(L)
#ValueError: attempt to assign sequence of size 5 to extended slice of size 1
不明白为什么L[-1:-2:-1]不能按[99,99,99,99,99]赋值
使用切片赋值对正数和负数都有效。但是您需要为切片产生的项目数分配正确的序列长度:
L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L[1:5:2] = [99, 99]
print(L) # [0, 99, 2, 99, 4, 5, 6, 7, 8, 9]
L[1:5:2] = [99, 99, 99] # ValueError: attempt to assign sequence of size 3 to extended slice of size 2
或否定:
L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L[-2:-4:-1] = [99, 99]
print(L) # [0, 1, 2, 3, 4, 5, 6, 99, 99, 9]
L[-2:-4:-1] = [99, 99, 99] # ValueError: attempt to assign sequence of size 3 to extended slice of size 2
该规则的例外情况是切片步长为 1(或省略,因为默认为 1)。然后匹配的切片被删除并替换为分配给它的任何内容。
L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L[1:9] = [99]
print(L) # [0, 99, 9]
在您的第二个示例中,
L[-1:-2:-1]
指的是从索引 -1 开始到索引 -2 结束的切片,步长为 -1,这意味着它选择列表的最后一个元素。因此,切片L[-1:-2:-1]
只包含一个元素。
要将值
[99,99,99,99,99]
分配给列表的最后一个元素,您可以使用 L[-1:]
而不是 L[-1:-2:-1]
。
L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L[-1:] = [99,99,99,99,99]
print(L)
返回:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 99, 99, 99, 99, 99]