Python新手常见问题五 在遍历列表的同时又修改该列表
【摘要】在遍历列表的同时又在修改这个列表下面这个例子中的代码应该比较明显了:>>>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作用域的规则
就业培训申请领取
环球青藤
官方QQ群扫描上方二维码或点击一键加群,免费领取大礼包,加群暗号:青藤。 一键加群
Python编程相关文章推荐
|Python编程最新文章推荐
最新文章
Python编程各地入口
环球青藤官方微信服务平台
刷题看课 APP下载
免费直播 一键购课
代报名等人工服务
Python编程热点排行