当前位置: 首页 > news >正文

天津网站建设icp备适合成人参加的培训班

天津网站建设icp备,适合成人参加的培训班,公司装修费分几年摊销,wordpress注册密码假定有一个Python列表,比如[CFFEX.IF, CFFEX.TS,SHFE.FU],现在需要将其中带‘CFFEX’前缀的所有元素都删除。在使用列表推导式一行代码搞定之前,用了一种最朴素的遍历删除方法,结果出现了意想不到的的问题。复盘了下,结…

假定有一个Python列表,比如['CFFEX.IF', 'CFFEX.TS','SHFE.FU'],现在需要将其中带‘CFFEX’前缀的所有元素都删除。在使用列表推导式一行代码搞定之前,用了一种最朴素的遍历删除方法,结果出现了意想不到的的问题。复盘了下,结论非常有意思,故记录下来,引以为戒。

方法1:用enumerate()枚举遍历,定位到元素后,使用pop()或del方法直接删除该元素。

结果输出发现,会出现删不完整的奇怪现象。正确结果应该是输出['SHFE.FU'],结果发现第2个元素未被删除!

原因解析:

enumerate()函数会返回一个游标,以及该游标位置的元素。for循环首次调用返回0,'CFFEX.IF',由于满足条件0位置元素被删除。然后进入下一次循环,此时会返回1, 'SHFE.FU',而不是我们预期的1, 'CFFEX.TS',由于原来第2个元素被跳过,导致未被删除。

根本原因,是因为删除第1个元素后,列表发生了变化,而enumerate()会基于新列表进行游标遍历,从而出现了上面的问题。

一种解决办法,就是删除元素后,游标保持不动,还保留在原位置,比如前面删除了0位置元素后,游标仍指向0,同时将列表长度减1。这个办法就是方法3的主要思路。

方法2:用for i in range(len(varieties))循环遍历删除

方法1中存在的bug依然存在,同时代码还会报错,提示游标越界!

原因也很明显,for循环里range(len(varieties))已经固定了原来列表的长度,比如本例中3个元素,range()会依次遍历0、1、2三个位置,删除0元素后,游标1会指向'SHFE.FU',出现了方法1中同样的bug,但跟方法1不同的是,它结束游标1处理后,还会继续处理游标2位置,在访问varieties[2]时报游标越界错误!方法1中没有报错,是因为它调用enumerate()不会出现越界错误。

方法3:采用笨办法,仅供演示,真实情况下不可能这么写

解决方法1的bug,具体逻辑见方法1中相关描述。

方法4:使用列表推导式,一行代码搞定,简洁优美无bug

[x for x in varieties if not x.startswith(prefix)]

附录:Python示例代码(jupyter环境)

改写后的代码

http://www.dinnco.com/news/7215.html

相关文章:

  • 网站建设之织梦后台熊掌号主页济南新站seo外包
  • 又好又快自助建站网站关键字优化技巧
  • 株洲网站设计外包运营网络培训学校
  • 增城新塘网站建设北京发生大事了
  • 关于做网站书籍网络推广策划方案模板
  • 南通网站建设top宁波网站seo公司
  • 做外贸最适合的网站系统长沙seo 优化选智投未来no1
  • b2b电商网站有哪些网上在哪里打广告最有效
  • 电商网站制作公司app推广接单发布平台
  • 石家庄营销公司有哪些淮北seo
  • 国内自建的海淘网站免费b站推广网站入口
  • 免费创建论坛网站体验营销理论
  • 嘉兴网站建设系统一个域名大概能卖多少钱
  • 保定设计网站建设stp营销战略
  • 做go分析的网站杭州seo营销
  • 大余县网站百度助手
  • 温州网站建设怎么样seo兼职平台
  • 可以免费进的服务器网站百度霸屏全网推广
  • 企业网站网站建设大数据营销推广精准粉
  • 自己怎样建立个人网站杭州正规引流推广公司
  • 网站建设推广语网络关键词优化软件
  • 政府网站建设问题及对策泰安seo培训
  • 怎样做好公司网站怎么做公司网站推广
  • 咸阳做网站xymokjseo优化与品牌官网定制
  • 传销公司做网站什么罪名广告网
  • 苏州网站设计公司排名深圳最新消息今天
  • 徐州商城网站建设网站seo优化服务
  • 怎样在工商局网站做申请登记付费推广
  • 网站做动态虚线seo推广优化排名软件
  • 国外做美食的网站有哪些搜狗seo优化