Python中对list变量使用remove函数时,如下代码,想要达到的效果是将a中所有元素全部移除,即print(a)为[]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in a:
a.remove(i)
print("a为:", a)
但是运行结果如下:
a为: [2, 4, 6, 8, 10]
这是因为remove函数在使用过程中会同时将后一位数据前移,而for循环中的i是按照下标来读取内容的,因此在删除元素“1”之后,i读取a[1]中的内容,但此时a[1]的值会因为前移而变为“3”,所以2便不会被删除,因此会留下一半数据。
该函数的这个特性可以用作list的跳跃操作,而如果要使用remove函数实现完全删除操作,可以对列表逆序进行remove
方法一:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
i = len(a) - 1 # 列表最大索引为列表长度 - 1,这是因为列表索引从0开始
while i >= 0:
a.remove(a[i])
i -= 1
print("a为:", a)
输出结果:
a为: []
或者建立copy变量辅助操作:
方法二:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = a.copy()
for i in b:
a.remove(i)
print("a为:", a)
输出结果:
a为: []