python 正序循环使用remove和delect删除报index溢出错误

1.首先看通过索引删除:

lst=['asdfgh','kkkkpppp','nnnmmmgh','ssssoooppp']
for i in range(len(lst)):
    if lst[i].endswith('gh'):
        # del lst[i]
        lst.remove(lst[i])
print(lst)

不管是del lst[i],还是lst.remove(lst[i]),都报错:
在这里插入图片描述
解决办法:
由于remove在for循环中动态改变了list长度和每一个元素的位置,因此不能用正序循环,否则报错index溢出;正确的做法是使用 倒序循环

lst=['asdfgh','kkkkpppp','nnnmmmgh','ssssoooppp']
for i in range(len(lst)-1,-1,-1):
    if lst[i].endswith('gh'):
        del lst[i]
        # lst.remove(lst[i])
print(lst)

不管是del lst[i] 还是lst.remove(lst[i])
运行结果:
在这里插入图片描述
倒序就有点懵了,range(3,-1,-1)
索引从3开始,3到-1,步长是-1
3,2,1,0
lst[3] lst[2] lst[1] lst[0]就是倒序了

2.换一种方法,切片删除:

lst=['asdfgh','kkkkpppp','nnnmmmgh','ssssoooppp']
for i in lst[:]:
    if i.endswith('gh'):
        lst.remove(i)
print(lst)

运行结果:

['kkkkpppp', 'ssssoooppp']

哈哈 突然发现lst[:]和lst 是一样的

lst=['asdfgh','kkkkpppp','nnnmmmgh','ssssoooppp']
for i in lst:
    if i.endswith('gh'):
        lst.remove(i)
print(lst)
#运行结果
#['kkkkpppp', 'ssssoooppp']

猜你喜欢

转载自blog.csdn.net/zhaoweiya/article/details/108797940
今日推荐