跟随我感到困惑的书

这本书说删除项目符号副本中的项目符号,而不是自己

但是我尝试两种效果,真的一样吗?

那么这两个代码有什么区别?

for bullet in bullets.copy():   if bullet.rect.y <= 0:bullets.remove(bullet)

==========================================

for bullet in bullets():   if bullet.rect.y <= 0:bullets.remove(bullet)

==========================================

这是整个代码:

    #! /usr/bin/pythonimport pygame as pimport sysclass Setting():def __init__(self,width,height):self.w=widthself.h=heightself.flag=p.RESIZABLEself.color=(255,255,255)self.speed=1self.screen=p.display.set_mode((self.w,self.h),self.flag)p.display.set_caption("Bullet")self.bullet_s=1self.bullet_w=5self.bullet_h=30self.bullet_c=(0,0,0)class Bullet(p.sprite.Sprite):def __init__(self,setting):super().__init__()self.screen_rect=setting.screen.get_rect()self.screen_center=self.screen_rect.centerself.rect=p.Rect((0,0),(setting.bullet_w,setting.bullet_h))self.rect.center=self.screen_centerself.rect.bottom=self.screen_rect.bottomself.color=setting.bullet_cself.speed=setting.bullet_sself.y=float(self.rect.centery)def bullet_check(self,bullets,setting):for event in p.event.get():if event.type == p.QUIT:sys.exit()elif event.type == p.KEYDOWN:if event.key ==p.K_SPACE:bullets.add(Bullet(setting))def move(self):self.y -= self.speedself.rect.y=self.ydef draw(self,setting):p.draw.rect(setting.screen,self.color,self.rect)def bullet_blit(self,bullets,setting):for bullet in bullets.sprites():bullet.draw(setting)bullet.move()for bullet in bullets.copy():     **<-- for bullet in bullets:  really same effect**if bullet.rect.y <= 0:bullets.remove(bullet)print(len(bullets))
def game():p.init()setting=Setting(1200,800)bullet=Bullet(setting)bullets=p.sprite.Group()    while True:bullet.bullet_check(bullets,setting)setting.screen.fill((255,0,0))bullet.bullet_blit(bullets,setting)p.display.flip()
game()

解决方案


问题是当您要删除更多元素并且它们彼此相邻时。当您删除第一个元素时,其他元素将移动并for跳过第二个元素-因此,最终它不会删除所有元素。

这可以正常工作-删除所有元素,您将获得空列表 []

data = ['a', 'a']for x in data.copy():if x == 'a':data.remove(x)print(data)

这行不通-跳过一些元素,您将获得列表 ['a']

data = ['a', 'a']for x in data:if x == 'a':data.remove(x)print(data)

在python中,使用要保留的元素创建新列表非常流行

data = ['a', 'a', 'b', 'a', 'a']result = []for x in data:if x != 'a':result.append(x)data = resultprint(data)

但是可以通过列表理解来缩短

data = ['a', 'a', 'b', 'a', 'a']data = [x for x in data if x != 'a']print(data)

删除副本列表中的消失项目符号相关推荐

  1. 清除“添加或删除程序”列表中残留的程序项目

    经常会遇到某个程序已经删除了,依然存在"添加或删除程序"列表中的情况,看起来总觉得不爽.我们可以手动在注册表中将其清除. 打开注册表(开始->运行->regedit)  ...

  2. html三角形无序列表样式,Keynote创建项目符号列表或编号列表

    文本框会添加到幻灯片上. 选择要格式为列表的文本,然后从 中选取一个选项. 2.选定了文本框后,在"格式"检查器的"文本"面板中,从"项目符号与列表& ...

  3. 如何从“添加/删除程序”列表中手动删除程序

    重要说明:本文包含有关修改注册表的信息.修改注册表之前,一定要备份注册表,并且一定要知道在发生问题时如何还原注册表.有关如何备份.还原和编辑注册表的信息,请单击下面的文章编号,以查看 Microsof ...

  4. Word控件Spire.Doc 【段落处理】教程(四):如何在 C#、VB.NET 中设置 Word 项目符号样式

    Word Bullet 可以将多个段落格式化为列表.它可以用项目符号强调段落并吸引读者的注意力.使用项目符号,列出的段落将自动缩进符号,可以是点.数字或其他自定义符号(如小星.三角形.箭头等). Sp ...

  5. html 圆圈项目符号,html – 列表项下的项目符号

    因此,我对您的代码进行了一些更改,以解决您的问题: >增加子弹从顶部的距离 >通过左侧居中:50%和translateX(-50%) >将子弹设置为绝对位置,并将其父级li设置为相对 ...

  6. html项目符号正方形,html – 列表项下的项目符号

    因此,我对您的代码进行了一些更改,以解决您的问题: >增加子弹从顶部的距离 >通过左侧居中:50%和translateX(-50%) >将子弹设置为绝对位置,并将其父级li设置为相对 ...

  7. 注册表删除卸载列表中的软件

    在使用电脑卸载列表中,有部分软件怎么卸载都不起作用.那么我们可以使用注册表来直接删除软件,然后手动清除软件文件即可. 注册表路径: 64位: \HKEY_LOCAL_MACHINE\SOFTWARE\ ...

  8. video-js 删除视频列表中的某个视频后,重复初始化不成功问题(通过ID初始化)

    问题:删除剪辑视频列表中的一个视频后,添加一个视频到列表,然后打开剪辑面板时,播放器video-js初始化失败,使用了浏览器默认的播放器. 原因(猜测):由于ID格式为"videoPlaye ...

  9. 删除list列表中的某一个元素的多种方法

    转载: https://www.cnblogs.com/blogsofmy/p/10955171.html 当我们在处理业务的时候,很多情况下数据都要进行一层层的过滤,最近需要给一个列表中去除不符合条 ...

最新文章

  1. Citrix通用打印服务器配置
  2. 云服务器centos登录日志文件,云服务器centos登录日志文件
  3. 注释数据库介绍之GO、KEGG数据库
  4. eureka知识点概览
  5. Codeforces problem 67E(多边形求内核的应用)
  6. iOS 根据图片URL从本地相册获取图片
  7. python读取栅格gdal库下载链接
  8. Angular CDK Layoout 检测断点
  9. bolt在java,java – 在Apache Storm中将不同的元组从1个spout发送到不同的bolt
  10. 【Hive】解析字符串(类似array嵌套map结构)
  11. TestNG安装及配置
  12. ActiveXObject ADODB.Stream封装
  13. vue项目使用阿里矢量图标库
  14. python打印九九乘法表代码
  15. 干货——MRD(市场需求文档)模板
  16. OutMan——面向对象的三大特性、对象和对象之间的关系以及动态类型检测方法
  17. 极简图床中文教程-七牛云CDN永久免费图片外链
  18. Leetcode每日一题——T32. 最长有效括号(难)——栈
  19. curl api接口获取当前IP地址
  20. 支付宝推“移动花卡”:花呗账单延后还

热门文章

  1. Mac 如何恢复出厂设置
  2. Unity3D 游戏引擎之平面小球重力感应详解【转】
  3. 学术与技术(与队长交流偶得)
  4. 牛客网(剑指offer) 第二十题 包含min函数的栈
  5. 正则表达式的20个小应用
  6. [Android] 通过Menu实现图片怀旧、浮雕、模糊、光照和素描效果
  7. Git之深入解析Rerere重用记录的解决方案
  8. LeetCode Algorithm 606. 根据二叉树创建字符串
  9. 没想到MySQL还会问这些...
  10. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1094:与7无关的数