python for循环删除

python for循环遍历时,能动态删除元素吗?本文讲给你答案。

先来上个代码:

# -*- coding:utf-8 -*-
list = [1,2,3,4,5,6,7,8]

# 使用for 删除某个元素
for i in list:
    if i == 3 or i == 4:
        list.remove(i)

print(list)
  1. 分析:

当我们在for 循环里删除多个值的时候,发现只删除了第一个.后面的值没有删除成功. 分析过后发现 当for 循环到
if i == 33 or i == 44 当i 的值为33时满足条件,这时候就会去删除 list 列表里的33 , 删除过后后面的值就会把前面的空位填起来.这时候44key就发生了改变.44key位置就变成了33以前key的位置,这样44就会删除不到了.

删除3个值

# -*- coding:utf-8 -*-

list = [1,2,3,4,5,6,7,8]

# 使用for 删除某个元素

for i in list:

    if i == 3 or i == 4 or i== 5:

        list.remove(i)

print(list)

删除4个值

# -*- coding:utf-8 -*-

list = [1,2,3,4,5,6,7,8]

# 使用for 删除某个元素

for i in list:

    if i == 3 or i == 4 or i== 5 or i == 6:

        list.remove(i)

print(list)

解决方法:

先使用深拷贝获取一份列表的拷贝,然后遍历原来的列表。

1.顺序遍历删除:ok

list_demo = [1,2,3,4,5,6]
 
for index, item in enumerate(list_demo[:]):
 
    list_demo.remove(item)
 
print(list_demo)


2.倒叙遍历删除:ok

list_demo[::-1]
list_demo = [1,2,3,4,5,6]
 
for index, item in enumerate(list_demo[::-1]):
 
    list_demo.remove(item)
 
print(list_demo)

3.倒序遍历删除:

a = [0, 1, 2, 3, 4, 4, 4, 4, 4, 4]
for i in range(len(a)-1, -1, -1):
     if a[i] == 4:
         del a[i]

 numpy数组可以一边遍历,一边删除吗?

答案是:不能直接操作

但是可以转成list列表,然后进行操作:

numpy数组还没找到一边遍历,一边删除元素的方法。

转list后,里面的数据全部转成list了。

n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for index, x in  enumerate(n[:]):
    if index==3:
        continue
    n.remove(x)
print(n)
 
n = [np.array([1,2]),np.array([1,2]),np.array([1,2])]
 
data=np.array(n)
n=data.tolist()
for index, x in enumerate(n[:]):
    if index < 1:
        continue
    n.remove(x)
print(n)

你可能感兴趣的:(python基础)