您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在迭代过程中修改列表和字典,为什么字典失败?

在迭代过程中修改列表和字典,为什么字典失败?

我认为原因很简单。lists是有序的,dicts(在Python 3.6 / 3.7之前)而sets没有排序。因此,list不建议您在迭代时修改s作为最佳实践,但这会导致 一致,可重现和有保证的 行为。

您可以使用它,例如,假设您想将list偶数个元素拆分为一半,然后将第二个元素取反:

>>> lst = [0,1,2,3]
>>> lst2 = [lst.pop() for _ in lst]
>>> lst, lst2
([0, 1], [3, 2])

当然,执行此操作的方法更好,更直观,但要点是它可以工作。

相比之下,dicts和sets的行为完全是实现特定的,因为迭代顺序可能会根据哈希值而变化。

您会获得RunTimeErrorcollections.OrderedDict,大概是为了与dict行为保持一致。我认为dict在Python 3.6之后(dict保证s保持插入顺序)后,行为不会发生任何变化,因为在没有实际用例的情况下它将破坏向后兼容性。

请注意,尽管已订购,在这种情况下collections.deque也会引发a RuntimeError

其他 2022/1/1 18:49:15 有322人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶