python:消除nan在多个列表中的位置

python:消除nan在多个列表中的位置,python,list,nan,idl-programming-language,Python,List,Nan,Idl Programming Language,我来自IDL,试图在两个数据列表中找到并消除NAN。假设列表a的位置5有一个NaN,但列表B没有。我需要在两个列表中删除位置5。就像这样 A = [1, NaN, 3, 4, NaN, 6, 7, 8, 9] B = [1', 2', 3', NaN, 5', 6', 7', 8', NaN] A_new = [1 , 3 , 6 , 7 , 8 ] B_new = [1', 3', 6', 7', 8'] 下面是工作正常的IDL代码。我只需要把它翻译成python,我被难住了 ;Rem

我来自IDL,试图在两个数据列表中找到并消除NAN。假设列表a的位置5有一个NaN,但列表B没有。我需要在两个列表中删除位置5。就像这样

A = [1, NaN, 3, 4, NaN, 6, 7, 8, 9]

B = [1', 2', 3', NaN, 5', 6', 7', 8', NaN]

A_new = [1 , 3 , 6 , 7 , 8 ]

B_new = [1', 3', 6', 7', 8']
下面是工作正常的IDL代码。我只需要把它翻译成python,我被难住了

;Removes the NANs

loc = where((Finite(pdcsapflux) EQ 1)and(Finite(time) EQ 1))

flux_nonan = pdcsapflux(loc)

time_nonan = time(loc)

谢谢

我不知道python是否有NaN,只要假设它没有

ta, tb = [], []
for i in range(min(len(a), len(b))):
    if a[i] is None or b[i] is None:
        continue
    ta.append(a[i])
    tb.append(b[i])
ta,tb是a,b的输出 最后,您应该附加较长列表的其余项

A = [1, None, 3, 4, None, 6, 7, 8, 9]
B = [1, 2, 3, None, 5, 6, 7, 8, None]
print zip(*[
    (a, b) for a, b in zip(A, B)
    if a is not None and b is not None
])

根据@DSM的建议,如果您来自IDL,您可能希望将numpy用于实际数组,而不是列表。使用numpy直接替换IDL代码更像如下所示:

import numpy.random as ran
import numpy as np
arr = ran.rand(10)  # create some fake data
arr[[1,3,5]] = np.nan  # add some "bad" values
arr2 = arr[np.where(~np.isnan(arr))]

希望这对您有所帮助。

如果您使用的是numpy,您也可以在不使用where函数的情况下使用它(如果您使用大矩阵,则通常速度非常慢)


什么是
1'
?请更正你的代码…一个素数。只是一些数据的占位符。我想把它与A中的1区分开来。它可以是任何类型的有限值。如果你来自IDL,你可能想使用and而不是纯Python列表。@ThomasCannon你说的是
None
还是
1/0
?是的!很抱歉这正是我的意思。没有一个
import numpy as np 
A = np.array([1, NaN, 3, 4, NaN, 6, 7, 8, 9])
B = np.array([1, 2, 3, NaN, 5, 6, 7, 8, NaN])
A_new = A[~np.isnan(A)]
B_new = B[~np.isnan(B)]