• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞java代码 3年前 (2022-05-21) 24次浏览 已收录 0个评论

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

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

>>> <a href="https://www.gaodaima.com/tag/odd" title="查看更多关于odd的文章" target="_blank">odd</a> = lambda x : bool(x % 2)
>>> <a href="https://www.gaodaima.com/tag/numbers" title="查看更多关于numbers的文章" target="_blank">numbers</a> = [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

www#gaodaima.com来源gao@!dai!ma.com搞$$代^@码网搞代码

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

相关推荐:《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作用域的规则

来源:搞代码网:原文地址:https://www.gaodaima.com


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python新手常见问题五:在遍历列表的同时又修改该列表

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址