Python面试题目之(针对dict或者set数据类型)边遍历 边修改 报错dictionary changed size during iteration
2023-09-27 14:23:26 时间
# result 是一个字典, 把里面属性值是None的属性删除 for key in result: if not result[key]: del result[key] continue
但是报错信息如下
RuntimeError: dictionary changed size during iteration # 字典在迭代的时候改变了字典大小
python 遍历一个dict、set类型的同时,并且在改变这个变量的长度或者一边遍历一边修改,这时候就会抛出这错误;
我查了一些资料之后, 才发现用for in 迭代的时候是用迭代器的, (或许是个链表?), 不能在迭代的时候添加或删除属性, 只能更改属性值. (具体原理我也不太懂, 那么我先把问题解决了吧)
我想了想, 解决办法有两种, 一种是把字典转为列表, 然后再增删; 或者我不遍历字典, 只遍历字典的属性名, 那么就避开了这个问题.根据需要, 我选择了后面一种, 我是这么干的
这个问题在Python2和Python3中都会出现;
如下是针对python2和python3关于此类方法解决的思路:
# python2中遍历 dictVar.keys(),返回一个列表,从而得到一个列表,这样可以一边遍历列表一遍修改字典; # 但是这个方法在python3中无法使用,因为这时候按照遍历 dictVar.keys(),返回一个迭代器而不再是一个列表,所以这个时候把字典作为参数放到list方法内,这样才能返回一个列表;
请看下图解决方法:
相关文章
- Python内置字典;dict ,set
- 【机器学习算法-python实现】採样算法的简单实现
- python set快速的删除
- python set操作
- 【华为OD机试真题 python】服务失效判断 【2022 Q4 | 200分】
- python set模块
- python基础——使用dict和set
- 69 python - set、list、tuple关系
- python 内置函数详解
- Python Selenium设计模式及代码实现
- 测试面试Python高频考点
- 机器人系统设计与制作:Python语言实现3.2 习题
- Python第三方库安装方法-转载
- Python调用摄像头,实时显示视频在Tkinter界面
- Python Numpy 中的打印设置函数set_printoptions
- 一个python问题引发的思考
- python部分源码中方法只有pass占位符解释
- 《Python参考手册(第4版•修订版)》——1.17 获得帮助
- 《易学Python》—— 6.2 面向对象设计
- python函数的参数细节
- python 编码检测工具——chardet
- Python数据教程之在 Pandas 中向现有 DataFrame 添加新列解析xpath(解析岩石网页)
- python学习(五)之dict+set+不可变对象