怎么避免在遍历列表的同时又修改该列表

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

成都创新互联是专业的临翔网站建设公司,临翔接单;提供网站建设、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行临翔网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

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

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

>>> 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://scyanting.com/article/ihcjoo.html