在某些项目中包含nan或inf的列表列表

时间:2018-01-22 05:48:36

标签: python math nan

我在Python中有一个列表,如下所示:

l = [[1,2,inf,inf,87],[3,4,3,5,3],[73,5,3,3,nan],[8,3,3,2,2],[3,3,2,2,inf]]

如何删除包含infnan

的列表

感谢。

4 个答案:

答案 0 :(得分:4)

[subl for subl in l if all(math.isfinite(x) for x in subl)]

(给定Python> = 3.2;在早期的Pythons中,替换为numpy.isfinite,或显式检查值)

答案 1 :(得分:2)

您可以检查简单的条件,即

import math
l = [[1,2,math.inf,math.inf,87],[3,4,3,5,3],[73,5,3,3,math.nan],[8,3,3,2,2],[3,3,2,2,math.inf]]

[ i for i in l if (math.inf not in i) and (math.nan not in i) ]

[[3, 4, 3, 5, 3], [8, 3, 3, 2, 2]]

答案 2 :(得分:2)

@Amadan回答的一个变种:

list(filter(lambda x: all(map(math.isfinite, x)), l))

更通用的版本将使用numpy

import numpy as np
list(filter(lambda x: all(map(np.isfinite, x)), l))

答案 3 :(得分:0)

inf为math.inf,nan为np.nan:

import math
lst = [[1,2,math.inf,math.inf,87],[3,4,3,5,3],[73,5,3,3,np.nan],[8,3,3,2,2],[3,3,2,2,math.inf]]
for l1 in lst:
    if math.inf not in l1 and np.nan not in l1:
        print(l1)