python教程:一个 list 使用 for 遍历,边循环边删除的问题

今天由于要对一个 list 数据类型写一个循环删除的程序(这是小编第一次对于 list 操作),但发现一个奇异问题,来,我们来看看代码跟效果:

# 初始化一个 list 列表,为了下边的方便比较,我就使用跟 list 索引来做 list 的元素
datas = [0,1,2,3,4]

# 打印元素组,方便比较
print(datas)

#使用 for 遍历
for data in datas:

    # 删除 list 中的元素
    datas.remove(data)

# 打印删除后的数组
print(datas)

我们来看这一段代码,最后的输出结果,按照我以前的经验,应该是一个空的 [] ,但结果不是:
在这里插入图片描述
上面的结果却告诉我们,上面的程序只删除了三个元素,并没有全部删除完,为什么呢?从上面的结果中,我们可以看出,删除的元素是 1,3,5,从这我们可以看出,原来,是 list 在 for 循环中的索引问题,我们来实时跟踪一下 list 列表在 for 中的变化:

# 初始化一个 list 列表,为了下边的方便比较,我就使用跟 list 索引来做 list 的元素
datas = [0,1,2,3,4]

# 打印元素组,方便比较
print(datas)

# 记录是第几次 for 循环
index = 1

# 记录 datas 当前循环的下标值
i = 0

#使用 for 遍历
for data in datas:

    # 打印循环次数
    print('\n这是第 %d 次循环,datas 当前在 for 循环中的下标值为:%d,删除前 datas 的元素为:' %(index, i))

    # 实时打印 datas 列表
    print(datas)

    # 删除 list 中的元素
    datas.remove(data)


    # 循环次数+1
    index += 1

    # 索引 +1
    i += 1

# 最后的 datas 列表
print('\n循环结束,最后的 datas 的元素为:')
print(datas)

输出结果如下:
在这里插入图片描述
如上图可以看出,在 for 循环中 datas 没删除一个元素,它的索引都会变化,但 for 循环中遍历的索引,总会加 1 ,所以,就会出现以上这种跳过性删除的情况。对于这种情况,小编自己想到了一个方法,我们先来看看下面的这一段程序:

# 初始化一个 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]

#使用 for 遍历
for data in datas:

    # 现在我们需要删除偶数的元素
    if data % 2 == 0:

        # 删除 datas 中的元素
        datas.remove(data)

# 最后的 datas 列表
print('\n循环结束,最后的 datas 的元素为:')
print(datas)

我们来看看这段代码的运行结果:
在这里插入图片描述
我们可以看出,4 跟 10 是相邻着的,4 的下标是 2,10 的下标是 3,所以当 4 删除之后,datas 中下标为 2 的元素就变成了 10,但是,此时的 for 循环中,datas 的下标是 3 了,所以取不了 10 这个元素,这才导致了 10 没有被删除。那我们要如何来删除呢?小编的做法是这样的:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 初始化一个 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]

# 打印原数组元素,方便对比
print('原 datas 列表的元素为:')
print(datas)

# 定义一个空的 list 列表,来储存要删除的 datas 的元素
datas_del = []

#使用 for 遍历
for data in datas:

    # 现在我们需要删除偶数的元素
    if data % 2 == 0:

        # 不直接删除,将需要删除的元素,存入 datas_del 中
        datas_del.append(data)

# 打印 datas_del 列表,查看要删除的元素
print('\n打印 datas_del 列表,查看要删除的元素')
print(datas_del)

# 再执行一个 for 循环,遍历 datas_del 列表
for data in datas_del:

    # 删除 datas 中的元素
    datas.remove(data)

# 最后的 datas 列表
print('\n删除后的 datas 的元素为:')
print(datas)

现在我们来执行以下上面的这段代码,是否已经可以成功的删除所要删除的元素,我们看看结果:
在这里插入图片描述
从上面的结果可知,我们已经成功的将我们所需要的元素删除了,这就是小编自己想到的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python教程:一个 list 使用 for 遍历,边循环边删除的问题 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python学习:基础练习题

    1.输出0到100的数字,如果数字是3的倍数输出Fizz,5的倍数输出Buzz。 同时是3和5的倍数输出FizzBuzz,其他情况则打印原数字 for i in range(100): if i==0: print(i) elif i%3==0 and i%5==0: print(“FizzBuzz”) elif i%3==0: print(“Fizz”) …

    Python开发 2023年4月2日
    00
  • Python中5大模块的使用教程(collections模块、time时间模块、random模块、os模块、sys模块)

    1. 模块的简单认识 定义: 模块就是我们把装有特定功能的代码进行归类的结果. 从代码编写的单位来看我们的程序,从小到大的顺序: 一条代码 < 语句块 < 代码块(函数,类) < 模块.我们⽬目前写的所有的py文件都是模块.引入模块的方式: import 模块 from xxx import 模块 2. collections模块 coll…

    Python开发 2023年4月2日
    00
  • Python学习:标准库之数据持久存储与交换

    持久存储数据以便长期使用包括两个方面:在对象的内存中表示和存储格式之间来回转换数据,以及处理转换后数据的存储区。 标准库包含很多模块可以处理不同情况下的这两个方面 有两个模块可以将对象转换为一种可传输或存储的格式(这个过程被称为序列化)。最常用的是使用pickle持久存储,因为它可以与其他一些具体存储序列化数据的模块集成,如shelve。而对基于web的应用…

    Python开发 2023年4月2日
    00
  • Python教程:几个常用的内置函数

    匿名函数(lambda表达式) 在Python中,函数可以算的上是“一等公民”了,我们先回顾下函数的优点: 减少代码重复量 模块化代码 但是我们有没有想过,如果我们需要一个函数,比较简短,而且只需要使用一次(无需重复调用),那还需要定义一个有名字的函数么? 答案是否定的,这里我们就可以使用匿名函数来实现这样的功能。 我们先看看求一个数的平方,我们定义个函数怎…

    Python开发 2023年4月2日
    00
  • Python学习:转义字符及用法、数据类型转换函数

    ASCII编码为每个字符都分配了唯一的编号,成为编码值。在Python中,一个ASCII字符除了可以用它的实体(真正的字符)表示,还可以用它的编码值表示。这种使用编码值来间接地表示字符的方式成为转义字符(Escape Character)。 转义字符以\0或者\x开头、以\0开头表示后跟八进制形式的编码值,以\x开头表示后跟十六进制形式的编码值。Python…

    Python开发 2023年4月2日
    00
  • Python教程:类的派生

    一、派生 派生:子类中新定义的属性的这个过程叫做派生,并且需要记住子类在使用派生的属性时始终以自己的为准 1 派生方法一(类调用) 指名道姓访问某一个类的函数:该方式与继承无关 class OldboyPeople: “””由于学生和老师都是人,因此人都有姓名、年龄、性别””” school = ‘oldboy’ def __init__(self, nam…

    Python开发 2023年3月31日
    00
  • Python学习:构造函数与析构函数

    1.构造函数: __init__(self), 这个方法就是构造函数,在实例化的时候自动调用。 所有如果这个函数内有打印的方法,当实例出来的时候会打印里面的信息。 __init__方法的第一个参数永远都是self,表示创建实例本身,在__init__方法内部,可以把各种属性绑定到self,因为self指向创建的实例本身。 有了__init__方法,在创建实例…

    Python开发 2023年4月2日
    00
  • Python中切片操作的详细用法

    在利用Python解决各种实际问题的过程中,经常会遇到从某个对象中抽取部分值的情况,切片操作正是专门用于完成这一操作的有力武器。理论上而言,只要条件表达式得当,可以通过单次或多次切片操作实现任意切取目标值。切片操作的基本语法比较简单,但如果不彻底搞清楚内在逻辑,也极容易产生错误,而且这种错误有时隐蔽得比较深,难以察觉。 本文通过详细例子总结归纳了切片操作的各…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部