• python循环删除列表里的元素!漏删!


    1 li = [1,2,3,4,5,6]
    2 for i in li:
    3     if i<3:
    4         li.remove(i)
    5 print(li)

    #输出的结果是 [2,3,4,5,6]    2没有remove掉 是因为
    #在第一次循环的时候,1 被remove掉了
    #然后坑位由6个变为5个
    #以后的一次往前排,2到了第一个坑位
    #然后在迭代的时候,就是从第二个坑位开始迭代,就是从3开始
    #所以2 就这么被忽略了!

    解决:

    例子一:

    我是在做飞机大战,子弹越界要删除的时候遇到的这个问题,子弹都保存在bullet_list

    可以在 函数 里面定义一个 局部变量 remove_list

    在局部变量里定义是因为局部变量只有在调用的时候才有,函数调完的时候remove_list也就没了,省的自己还要删除

    1         for bullet in self.bullet_list:
    2             if bullet.judge():
    3                 self.remove_list.append(bullet)
    4         for i in self.remove_list:
    5             self.bullet_list.remove(i)

    这个地方在判断的时候用.judge()方法,而不是直接对self.y<0进行判断,也是养成对函数封装的好习惯,尽量不要对属性直接进行操作

    例子二:

    100个人围成一圈,编号1-100,从1 到M 报号,报到M 的人,退出,知道一圈还剩下M-1个人, 这时候剩下几个人,最初的号码是多少

    if __name__ == '__main__':
        people_list = list(range(1,101))
        M = int(input('请输入M:'))
        count_num = 0
        while 1:
            remove_list = []
            for people in people_list:
                count_num += 1
                if t%M == 0:
                    remove_list.append(people)
                    count_num = 0
            for i in remove_list:
                people_list.remove(i)
            if len(people_list) <=  M-1 :
                for temp in people_list:
                    print(temp)
                break
  • 相关阅读:
    Python协程
    Python3常用标准库
    温故而知新--day3
    温故而知新--day2
    解决 WPF 绑定集合后数据变动界面却不更新的问题
    WPF 消息框 TextBox 绑定新数据时让光标和滚动条跳到最下面
    C# 枚举转列表
    真・WPF 按钮拖动和调整大小
    使用 GB28181.Solution + ZLMediaKit + MediaServerUI 进行摄像头推流和播放
    将 .NET Framework 项目转换为 .NET Standard 项目
  • 原文地址:https://www.cnblogs.com/timtike/p/6268885.html
Copyright © 2020-2023  润新知