python3 解决list遍历时删除元素的问题

问题来源:https://blog.csdn.net/qxqxqzzz/article/details/103138686

方法:重新拷贝一份list,然后遍历去删除。参照python删除List元素的常用方法:https://blog.csdn.net/u013555719/article/details/84550700

解决:

a = ['1111', '2222', '3333', '222222', '4444']

for item in a[:]: # a[:]是 a的拷贝
    print('Now a=', a, 'item=', item,)
    print('check...', item)
    flg = False

    for j in range(len(item)):
        print('check...', item[j])
        if item[j] == '2':
            print('Wrong!')
            flg = True
        if flg == True:
            a.remove(item)
            break # break 跳出内层循环,最内层for循环,只跳出一层
print(a)

输出:

Now a= ['1111', '2222', '3333', '222222', '4444'] item= 1111
check... 1111
check... 1
check... 1
check... 1
check... 1
Now a= ['1111', '2222', '3333', '222222', '4444'] item= 2222
check... 2222
check... 2
Wrong!
Now a= ['1111', '3333', '222222', '4444'] item= 3333
check... 3333
check... 3
check... 3
check... 3
check... 3
Now a= ['1111', '3333', '222222', '4444'] item= 222222
check... 222222
check... 2
Wrong!
Now a= ['1111', '3333', '4444'] item= 4444
check... 4444
check... 4
check... 4
check... 4
check... 4
['1111', '3333', '4444']

注意:

直接赋值 b=a做拷贝的方法不可行。那样会在删除a元素的同时,也会删除b的元素

 

# a[:]是a的一个拷贝,b只是a的一个引用

>>> id(a) # 查看变量a的内存地址
2036786966656
>>> id(a[:])
2036786945920
>>> b=a
>>> id(b)
2036786966656

 

参考:https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html

 

你可能感兴趣的:(Python)