You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 07:49:54