用切片删除所有其他元素
考虑一下:
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
这些是 Python 中删除元素的正确语句:
numbers[0:2] = []
numbers[3:5] = []
但是下面的语句是不允许的:
numbers[::2] = []
ValueError:尝试将大小为 0 的序列分配给大小为 5 的扩展切片
是什么阻止了 Python 中的这种语句?
回答
ValueError:尝试将大小为 0 的序列分配给大小为 5 的扩展切片
是什么阻止了 Python 中的这种语句?
文档中指出,对于存在显式步骤(2在您的情况下)的情况,替换必须具有相同的长度。
| 手术 | 结果 | 笔记 |
|---|---|---|
| s[i:j] = t | 从 i 到 j 的 s 切片被可迭代 t 的内容替换 | |
| s[i:j:k] = t | s[i:j:k] 的元素被 t 的元素替换 | (1) t 必须与它要替换的切片具有相同的长度。 |
那里也记录了正确的方法。
| 手术 | 结果 | 笔记 |
|---|---|---|
| del s[i:j] | 与 s[i:j] = [] 相同 | |
| del s[i:j:k] | 从列表中删除 s[i:j:k] 的元素 |
代码:
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del numbers[::2]
print(numbers)
输出:
[1, 3, 5, 7, 9]