使用列表对象的remove()方法删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常。>>> a_list = [3,5,7,9,7,11]>>> a_list.remove(7)>>> a_list[3, 5, 9, 7, 11]代码编写好后必须要经过反复测试,不能满足于几次测试结果正确。例如,下面的代码成功地删除了列表中的重复元素,执行结果是完全正确的。>>> x = [1,2,1,2,1,2,1,2,1]>>> for i in x: if i == 1: x.remove(i) >>> x[2, 2, 2, 2]然而,上面这段代码的逻辑是错误的。同样的代码,仅仅是所处理的数据发生了一点变化,然而当循环结束后却发现并没有把所有的“1”都删除,只是删除了一部分。>>> x = [1,2,1,2,1,1,1]>>> for i in x: if i == 1: x.remove(i) >>> x[2, 2, 1]两组数据的本质区别在于,第一组数据中没有连续的“1”,而第二组数据中存在连续的“1”。出现这个问题的原因是列表的自动内存管理功能。在删除列表元素时,Python会自动对列表内存进行收缩并移动列表元素以保证所有元素之间没有空隙,增加列表元素时也会自动扩展内存并对元素进行移动以保证元素之间没有空隙。每当插入或删除一个元素之后,该元素位置后面所有元素的索引就都改变了。正确的代码:>>> x = [1,2,1,2,1,1,1]>>> for i in x[::]: #切片 if i == 1: x.remove(i)或者:>>> x = [1,2,1,2,1,1,1]>>> for i in range(len(x)-1,-1,-1): #从后往前删 if x[i]==1: del x[i]
|