列表删除
一,循环删除动态列表,删除的过程中,列表本身会变化
1, 错误方式1
n = [1,2,3,4,5,6,7,8,9,10]
for x in n:
n.remove(x)
print('方法三', n)
print('方法三最后', n)
输出:
方法三 [2, 3, 4, 5, 6, 7, 8, 9, 10]
方法三 [2, 4, 5, 6, 7, 8, 9, 10]
方法三 [2, 4, 6, 7, 8, 9, 10]
方法三 [2, 4, 6, 8, 9, 10]
方法三 [2, 4, 6, 8, 10]
2, 错误方式2, 遗漏了删除4
num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(num_list)
for item in num_list:
# if item == 2 or item == 3 or item == 4:
if item in (3, 4, 5):
print('被删除的元素', item)
num_list.remove(item)
else:
print(item)
print(num_list)
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1
2
被删除的元素 3
被删除的元素 5
7
8
9
10
[1, 2, 4, 6, 7, 8, 9, 10]
3,错误方式3 从这个例子能学到:如果在迭代时删除某个元素,会导致列表改变,但是迭代器依旧以原来的索引顺序迭代,这会导致数据错位,引起bug
# https://www.cnblogs.com/xuchunlin/p/6049371.html 42/61
def string_reverse1(string):
return string[::-1]
c=[5,6,7,1,2,3,4]
print(string_reverse1(c))
c=[5,6,7,1,2,3,4]
for b in c:
print ("before:"+str(b))
c.remove(b)
print(c)
print ("after:"+str(b))
输出:
[4, 3, 2, 1, 7, 6, 5]
before:5
[6, 7, 1, 2, 3, 4]
after:5
before:7
[6, 1, 2, 3, 4]
after:7
before:2
[6, 1, 3, 4]
after:2
before:4
[6, 1, 3]
after:4
2, 修改后
#代码中遍历的是n列表的复制品,从复制品中依次取出每一个元素,将n中对应的内容删除掉。
n = [1,2,3,4,5,6,7,8,9,10]
for x in n[:]:
print('方法一', n)
n.remove(x)
输出:
方法一 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
方法一 [2, 3, 4, 5, 6, 7, 8, 9, 10]
方法一 [3, 4, 5, 6, 7, 8, 9, 10]
方法一 [4, 5, 6, 7, 8, 9, 10]
方法一 [5, 6, 7, 8, 9, 10]
方法一 [6, 7, 8, 9, 10]
方法一 [7, 8, 9, 10]
方法一 [8, 9, 10]
方法一 [9, 10]
方法一 [10]
2, 长度循环
# 无论循环进行到哪一步,永远只删除当前列表的第一个元素,不使用不断增加的循环变量就不会出现数组下标越界了。
n = [1,2,3,4,5,6,7,8,9,10]
for x in range(len(n)):
n.remove(n[-1])
print('方法二', n)
输出:
方法二 [1, 2, 3, 4, 5, 6, 7, 8, 9]
方法二 [1, 2, 3, 4, 5, 6, 7, 8]
方法二 [1, 2, 3, 4, 5, 6, 7]
方法二 [1, 2, 3, 4, 5, 6]
方法二 [1, 2, 3, 4, 5]
方法二 [1, 2, 3, 4]
方法二 [1, 2, 3]
方法二 [1, 2]
方法二 [1]
方法二 []
3,从最后循环删除
def sort_select(a):
for i in range(len(a) - 1, -1, -1):
a.remove(a[i])
print('哈哈哈a', a, i)
c = [5, 6, 5, 7, 1, 2, 3, 4]
sort_select(c)
输出:
哈哈哈a [5, 6, 5, 7, 1, 2, 3] 7
哈哈哈a [5, 6, 5, 7, 1, 2] 6
哈哈哈a [5, 6, 5, 7, 1] 5
哈哈哈a [5, 6, 5, 7] 4
哈哈哈a [5, 6, 5] 3
哈哈哈a [6, 5] 2
哈哈哈a [6] 1
哈哈哈a [] 0
三 详解
a = [1,2,3,4,5,6,7,8]
print(id(a))
print(id(a[:]))
for i in a[:]:
if i > 5:
pass
else:
a.remove(i)
print(a)
print('-------------------------')
print(id(a))
输出:
2642353420480
2642351510592
[2, 3, 4, 5, 6, 7, 8]
[3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 8]
[5, 6, 7, 8]
[6, 7, 8]
[6, 7, 8]
[6, 7, 8]
[6, 7, 8]
-------------------------
2642353420480
写入自己的博客中才能记得长久