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

如何在嵌套列表推导式中添加条件处理NaN值?

解决列表展平时保留NaN值的问题

原代码遇到非可迭代的np.nan时会报错,核心原因是尝试遍历不可迭代的float对象。可以通过在列表推导式中加入条件判断,区分需要展开的子列表和需要直接保留的元素:

基础解决方案(仅处理列表和NaN)

import numpy as np
l = [[1], [2, 3, 4], np.nan, [5]]
flattened_list = [item for sublist in l for item in (sublist if isinstance(sublist, list) else [sublist])]
print(flattened_list)
# 输出:[1, 2, 3, 4, nan, 5]

逻辑说明:

  • 用三元表达式判断当前元素是否为列表:如果是,就正常遍历展开;如果不是(比如np.nan),就把它包装成单元素列表,这样遍历后会直接保留该元素。

通用解决方案(支持更多可迭代类型,排除字符串)

如果你的列表中还包含元组等其他需要展开的可迭代对象,同时不想展开字符串,可以用更通用的判断方式:

from collections.abc import Iterable
import numpy as np

l = [[1], (2, 3, 4), np.nan, [5], "hello"]
flattened_list = [item for sublist in l for item in (sublist if isinstance(sublist, Iterable) and not isinstance(sublist, str) else [sublist])]
print(flattened_list)
# 输出:[1, 2, 3, 4, nan, 5, 'hello']

逻辑说明:

  • 借助Iterable判断元素是否可迭代,同时排除字符串类型(避免把字符串拆成单个字符),非目标可迭代元素直接包装为单元素列表保留。

内容的提问来源于stack exchange,提问作者SkyWalker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:36:20