成都网站建设设计

将想法与焦点和您一起共享

怎么避免在遍历列表的同时又修改该列表-创新互联

创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!

为企业提供做网站、成都做网站、网站优化、成都全网营销、竞价托管、品牌运营等营销获客服务。创新互联拥有网络营销运营团队,以丰富的互联网营销经验助力企业精准获客,真正落地解决中小企业营销获客难题,做到“让获客更简单”。自创立至今,成功用技术实力解决了企业“网站建设、网络品牌塑造、网络营销”三大难题,同时降低了营销成本,提高了有效客户转化率,获得了众多企业客户的高度认可!

今天就跟大家聊聊有关怎么避免在遍历列表的同时又修改该列表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

在遍历列表的同时又在修改这个列表

下面这个例子中的代码应该比较明显了:

>>> odd = lambda x : bool(x % 2)
>>> numbers = [n for n in range(10)]
>>> for i in range(len(numbers)):
...     if odd(numbers[i]):
...         del numbers[i]  
# 这不对的:在遍历列表时删掉列表的元素。
...
Traceback (most recent call last):
      File "", line 2, in 
IndexError: list index out of range

遍历一个列表或者数组的同时又删除里面的元素,对任何有经验的软件开发人员来说这是个很明显的错误。但是像上面的例子那样明显的错误,即使有经验的程序员也可能不经意间在更加复杂的程序中不小心犯错。

所幸,Python集成了一些优雅的编程范式,如果使用得当,可以写出相当简化和精简的代码。一个附加的好处是更简单的代码更不容易遇到这种“不小心在遍历列表时删掉列表元素”的bug。例如列表推导式(list comprehensions)就提供了这样的范式。再者,列表推导式在避免这样的问题上特别有用,接下来这个对上面的代码的重新实现就相当完美:

>>> odd = lambda x : bool(x % 2)
>>> numbers = [n for n in range(10)]
>>> numbers[:] = [n for n in numbers if not odd(n)]  
# 啊,这多优美
>>> numbers
[0, 2, 4, 6, 8]

看完上述内容,你们对怎么避免在遍历列表的同时又修改该列表有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联-成都网站建设公司行业资讯频道,感谢大家的支持。


分享文章:怎么避免在遍历列表的同时又修改该列表-创新互联
标题链接:http://chengdu.cdxwcx.cn/article/djipsd.html