我在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]]
如何删除包含inf
或nan
?
感谢。
答案 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)