Python列表中多个NaN值的唯一索引获取问题
问题:将含多个NaN的列表转为索引为键的字典
原始列表(需先导入math模块):
import math l = [1, 'str', ',,,,', math.nan, 'another_str', math.nan, math.nan, 'last_str']
目标是生成以列表索引为键、对应元素为值的字典,预期结果:
{0: 1, 1: 'str', 2: ',,,,', 3: math.nan, 4: 'another_str', 5: math.nan, 6: math.nan, 7: 'last_str'}
错误代码的问题
使用以下代码时,所有NaN的索引都返回3,导致字典中仅保留一个NaN条目:
d_l = {} for i in l: idx = l.index(i) print(idx, i) d_l[idx] = i
原因是list.index()会返回元素第一次出现的索引,而NaN的特性是math.nan != math.nan,导致后续的NaN无法被index()正确识别位置,全部映射到第一个NaN的索引3上,最终覆盖为一个条目。
你尝试的替换方案无效,因为idx = l.index(i)已经提前获取了第一个NaN的索引,后续替换元素值不会改变这个索引,所以还是会重复覆盖同一个键。
正确实现方法
方法1:使用enumerate(推荐)
直接遍历索引和对应元素,无需查找索引,完美解决NaN的问题:
# 字典推导式写法 d_l = {idx: val for idx, val in enumerate(l)} # 普通循环写法 d_l = {} for idx, val in enumerate(l): d_l[idx] = val
方法2:遍历索引范围
通过列表长度生成索引,再直接取对应位置的元素:
d_l = {} for idx in range(len(l)): d_l[idx] = l[idx]
这两种方法都能直接关联每个索引和对应元素,不会受NaN的特性影响,生成符合预期的字典。
内容的提问来源于stack exchange,提问作者BCArg
相关产品推荐
相关产品推荐

