当前位置: 首页 > Python编程 > Python编程实战技能 > Python编程基础入门 > Python新手常见问题五 在遍历列表的同时又修改该列表

Python新手常见问题五 在遍历列表的同时又修改该列表

发布时间:2020年09月27日 09:58:21 来源: 点击量:789

【摘要】在遍历列表的同时又在修改这个列表下面这个例子中的代码应该比较明显了:>>>odd=lambdax:bool(x%2) >>>numbers=[nforninrange(10)] >>>fori

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

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

>>> 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 "<stdin>", line 2, in <module>
IndexError: list index out of range

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

相关推荐:《Python视频教程》

所幸,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]

相关推荐:

Python新手常见问题四:误用Python作用域的规则

分享到: 编辑:wangmin

就业培训申请领取
您的姓名
您的电话
意向课程
点击领取

环球青藤

官方QQ

扫描上方二维码或点击一键加群,免费领取大礼包,加群暗号:青藤。 一键加群

绑定手机号

应《中华人民共和国网络安全法》加强实名认证机制要求,同时为更加全面的体验产品服务,烦请您绑定手机号.

预约成功

本直播为付费学员的直播课节

请您购买课程后再预约

环球青藤移动课堂APP 直播、听课。职达未来!

安卓版

下载

iPhone版

下载
环球青藤官方微信服务平台

刷题看课 APP下载

免费直播 一键购课

代报名等人工服务

课程咨询 学员服务 公众号

扫描关注微信公众号

APP

扫描下载APP

返回顶部