列表删除
一,循环删除动态列表,删除的过程中,列表本身会变化
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
写入自己的博客中才能记得长久
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-12-14 pip升级最新版本