这个问题很简单, 首先想到的就是
a = list(range(10))
del a[2]
这个就可以很方便的删除掉 a 中的第 3 个元素.
如果我想删除多个元素怎么办, 比如我想删除第 3, 4, 5, 6 个元素? 这个也很好办:
a = list(range(10))
del a[2:6]
那么我要删除的元素的索引不连续呢? 比如我要删除第 3, 4, 6 个元素?
a = list(range(10))
a = [item for index, item in enumerate(a) if not index in [3, 4, 6]]
但是这个操作跟前面的 del 操作有个明显的区别, 就是这种方法实际上是又重新创建了一个 list. 那么, 我不想重新创建一个 list, 而用 del 不行吗?
a = list(range(10))
for index in [3, 4, 6]:del a[index]
这个是有问题的, 你可以把 a 打印出来看一下:
[0, 1, 2, 4, 6, 7, 9]
少的是第 3, 5, 8 个元素. 这个其实也很好理解, 因为当你删除掉了第 3 个元素, 那么第 5 个元素变成了第 4 个元素, 下一次删除的时候, 就会把原先的第 5 个元素删除掉. 其实解决方法很简单.
a = list(range(10))
for index in sorted([3, 4, 6])[::-1]:del a[index]
从后往前删就 OK 了. 这么费劲, 是为了 id(a) 保持不变, 这在某些特定的地方会用到.