赵娜0418

2020-11-21   阅读量: 16

Python

列表在遍历的时候可以修改吗?

问题详述:列表在遍历的时候可以修改吗?

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集成了一些优雅的编程范式,如果使用得当,可以写出相当简化和精简的代码。一个附加的好处是更简单的代码更不容易遇到这种“不小心在遍历列表时删掉列表元素”的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]



46.2668 2 0 关注作者 收藏

评论(0)


暂无数据

推荐帖子

推荐课程