2016-05-27 11 views
0

長いタプルのリストを持っていて、Pythonを使ってタプルのタプルを削除したい。タプルのリストを含むタプルを削除する - Python

私は現在持っているもの: X = [( '録画開始'、0)、(ナン、4)、(ナン、7)、...、( 'イベント・マーカー1'、150)]

私が探している

結果:私はそれを使用np.isnanとバリエーションを試してみたのx = [( 'スタートを記録'、0)、( 'イベント・マーカー1'、150)]

が、 ufunc 'isnan'は入力タイプに対応しておらず、キャストルール "safe"に従って入力をサポートされているタイプに強制的に強制的に強制することはできません

すべての提案感謝されるでしょう!

答えて

2

を。それは、他のタイプのために動作しませんので、チェックは最初math.isnanで、その後のタイプをチェックして行われる:

import math 

x = [('Recording start', 0), (float('nan'), 4), (float('nan'), 7), ('Event marker 1', 150)] 
res = [t for t in x if not any(isinstance(n, float) and math.isnan(n) for n in t)] 
print(res) 

出力:

[('Recording start', 0), ('Event marker 1', 150)] 
0
res = [n for n in x if not nan in n] 

戻り、それらのオブジェクトnanを持っていないx内のすべてのオブジェクト。

+0

:例を参照してくださいそれだけでその正確な' nan'オブジェクトを検出します(つまり、オブジェクト 'xがあるように、' X 'という真実です)。 –

1

リスト内包使い方:あなたはタプル内の項目のいずれかがNaNであるかどうかをチェックリストの内包表記を使用することができ

x = [('Recording start', 0), (nan, 4), (nan, 7), ('Event marker 1', 150)] 

new = [i for i in x if nan not in i] 
+0

注意:すべての 'nan'が*正確な*同じPythonオブジェクトである場合にのみ機能します。私が何を意味するかを見るには、float( 'nan')、float( 'nan')で 'float( 'nan')を試してください。 –

0

は、少なくとも私のpythonでナンの使用法はありません「retured私は自分自身で定義したのです。 私はyorの必要性のためにPythonフィルタ関数を使うことができると思います。これはnan` `のための試験の安全な方法ではありません

nan = float('nan') 
lst = [('Recording start', 0), (nan, 4), (nan, 7), ('Event marker 1', 150)] 
y = filter(lambda x: nan not in x, lst) 
print y 

[('Recording start', 0), ('Event marker 1', 150)]

関連する問題