Python 混合类型列表收集数值元素索引的代码异常问题
现有代码存在的问题
- 索引获取逻辑存在本质缺陷:代码遍历列表拿到元素后,调用
types_list.index(i)来获取元素位置,但Python列表的index()方法天生只会返回列表中第一个和目标值匹配的元素索引,这就导致列表后面再出现int、float类型的元素时,查到的永远是第一次出现的那个位置,根本不是当前遍历到的元素的真实索引,和你观察到的“后续int返回首个int索引、后续float返回首个float索引”的现象完全吻合。 - 存在未定义的变量引用:往
numeric_indices追加内容时,代码写的是numeric_indices.append(myindex),但myindex这个变量从来没有被赋值过,运行到这一步会直接抛出NameError,根本走不到收集索引的环节。 - 缺少必要的模块导入:代码中使用了
datetime.datetime类型,但没有提前导入datetime模块,运行时会直接报模块不存在的错误。
正确实现方案
要拿到所有符合条件的元素索引,不需要用index()反查位置,直接在遍历的时候同步携带元素位置即可:使用Python内置的enumerate()方法遍历列表,同时拿到每个元素的原生索引和元素本身,判断类型匹配时,直接把当前拿到的真实索引存入列表就行。
示例可运行代码如下:
import datetime types_list = [str, int, float, datetime.datetime, int, int] numeric_indices = [] # 同时获取元素索引和对应的类型值 for idx, col_type in enumerate(types_list): # 判断当前类型是否为int或float数值类型 if col_type in (int, float): print(idx) numeric_indices.append(idx)
运行上述代码后,最终得到的numeric_indices值为[1, 2, 4, 5],完全匹配收集所有int、float类型元素索引的需求。
内容的提问来源于stack exchange,提问作者noricia
相关产品推荐
相关产品推荐

