如何在嵌套列表推导式中添加条件处理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
相关产品推荐
相关产品推荐

