跳过 NaN 值的列表理解
List comprehension that skips NaN values
我知道已经有类似的问题了
()
但解决方案不适合我的情况。
我有一个元组列表。我正在使用列表理解从这个元组列表中生成一个子元组列表。根据我正在读取的数据文件,有时我有 NaN (np.nan
) 值。在这些情况下,我的列表理解返回 nans (nan, nan)
的元组,但我不希望它没有。
下面是我尝试过的示例。它没有给我想要的输出,但也没有给出错误:
list_values =
[('A', 1., 2., 1),
('B', 3., 4., 1),
('C', 5., 6., 1),
('D', nan, nan, 1),
('E', nan, nan, 1),
('F', nan, nan, 1)])
我认为这行得通,但行不通:
pairs = [tuple((x[1] + x[3], x[2] + x[3])) for x in list_values if x[1] is not np.nan]
它returns这个:
[(2.0, 3.0), (4.0, 5.0), (6.0, 7.0), (nan, nan), (nan, nan), (nan, nan)]
而我想:
[(2.0, 3.0), (4.0, 5.0), (6.0, 7.0)]
我不知道为什么我的 if 条件什么都不做。任何见解表示赞赏,谢谢!
is not np.nan
不是您进行 NaN 检查的方式。这是对特定对象 np.nan
的身份检查,大多数 NaN 都不会是那个特定对象。
math.isnan
是 NaN 检查,您可以使用 genexp 将该检查应用于 x
的元素。 (此外,您不需要在元组上调用 tuple
。)
pairs = [(x[1] + x[3], x[2] + x[3]) for x in list_values
if all(not math.isnan(elem) for elem in x[1:])]
我知道已经有类似的问题了
(
我有一个元组列表。我正在使用列表理解从这个元组列表中生成一个子元组列表。根据我正在读取的数据文件,有时我有 NaN (np.nan
) 值。在这些情况下,我的列表理解返回 nans (nan, nan)
的元组,但我不希望它没有。
下面是我尝试过的示例。它没有给我想要的输出,但也没有给出错误:
list_values =
[('A', 1., 2., 1),
('B', 3., 4., 1),
('C', 5., 6., 1),
('D', nan, nan, 1),
('E', nan, nan, 1),
('F', nan, nan, 1)])
我认为这行得通,但行不通:
pairs = [tuple((x[1] + x[3], x[2] + x[3])) for x in list_values if x[1] is not np.nan]
它returns这个:
[(2.0, 3.0), (4.0, 5.0), (6.0, 7.0), (nan, nan), (nan, nan), (nan, nan)]
而我想:
[(2.0, 3.0), (4.0, 5.0), (6.0, 7.0)]
我不知道为什么我的 if 条件什么都不做。任何见解表示赞赏,谢谢!
is not np.nan
不是您进行 NaN 检查的方式。这是对特定对象 np.nan
的身份检查,大多数 NaN 都不会是那个特定对象。
math.isnan
是 NaN 检查,您可以使用 genexp 将该检查应用于 x
的元素。 (此外,您不需要在元组上调用 tuple
。)
pairs = [(x[1] + x[3], x[2] + x[3]) for x in list_values
if all(not math.isnan(elem) for elem in x[1:])]