python中删除‘指定值的元素’可以直接通过remove()实现比较简单。但是删除多个index对应的元素,却比较麻烦,如果缺少积累,可能需要花很多时间去思考。
例子: idx = [0, 1, 2] a = ['a', 'b', 'c', 'd', 'e', 'f'] 问题:删除idx中元素作为索引的a中的元素。 1、如果写为: for i in idx: del a[i] 这样是错误的,因为随着a中的元素被删除,a中的index是发生了变化的 2、如果写为 for idx0, elem in enumerate(a): if idx0 in idx: del a[idx0] 这样也是不可以的,因为随着a中的元素被删除,a中的index也是发生了变化的,for那里的a一直在变化 例①: b = [1, 2, 3] for i, ele in enumerate(b): print('ppp', i, ele) if i == 0: del b[i] print(b) 返回: ppp 0 1 [2, 3] ppp 1 3 [2, 3] 例②: b = [1, 2, 3] num = 0 for i in b: num += 1 del b[0] print(b, num) #最后一个元素被删除后,内存中没有b这个对象了,所以没有num==3 返回: [2, 3] 1 [3] 2 例③: b = [1, 2, 3] num = 0 for i, ele in enumerate(b): print('ppp', i, ele) num += 1 del b[0] print(b, num) 返回: ppp 0 1 [2, 3] 1 ppp 1 3 [3] 2 3、唯一正确的方法: 把idx倒过来 for i in reversed(idx): del a[i] 这样就可以保证前面的元素的index不发生改变补充: del 语句能进行切片删除;且能删除变量。 clear,是毁灭性的删除; remove,指定元素删除,只能删除第一个同名的元素。 pop ,指定索引删除,只能删除一个,且默认不写索引,有和append相反的功能。