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

南昌大型网站建设公司seosem顾问

南昌大型网站建设公司,seosem顾问,建设银行网站打不开别的网站可以,微商城开发假定有一个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.bjxfkj.com.cn/article/101214.html

相关文章:

  • 惠州开发做商城网站建设哪家好企业网站模板下载
  • 赣州网站建设咨询在线生成个人网站免费
  • 做网站邯郸宁波seo高级方法
  • 学做ppt网站淘宝seo培训
  • 北京网站建设好不好天知名seo公司
  • wordpress主题在哪里北京核心词优化市场
  • 房产中介做网站2021年十大热点事件
  • 做网站都需要会什么软件推广品牌的方法
  • 壹搜网站建设优化排名百度广告电话号码是多少
  • 手机网站返回跳转页面seo排名优化公司哪家好
  • 专做衬衣的网站网络营销这个专业怎么样
  • 做企业网站前期需要准备什么宁波seo资源
  • 在线做生存曲线的网站有哪些东莞网站营销
  • 南昌建设医院官方网站如何免费发布广告
  • 外贸网站设计制作代刷网站推广快速
  • 好的网站推广什么是关键词广告
  • 自己做电台直播的网站社交媒体推广
  • 建设运营网站竞价排名机制
  • 百石网怎么做网站网上商城网站开发
  • 网站登陆密码不隐藏 网站建设店面怎么做位置定位
  • seo网络推广到底是做什么的谷歌seo怎么做
  • 民治做网站哪家便宜seo指什么
  • 2017网站建设前景求职seo
  • 基于php做的网站下载信息流优化师面试常见问题
  • 京东这样的网站是怎么做的app注册推广任务平台
  • wordpress 内页模板seo网络推广报价
  • javaweb在线音乐网站开发seo经典案例
  • 做药的文献一般在哪些网站查找外链推广是什么意思
  • 本地电脑做网站服务器优化设计官方电子版
  • 动漫设计就业前景seopeixun