2017-01-11 6 views
0

私は時刻データのリストを持っていますが、各値はdatetime値です。 私は、時間データと一緒に行く浮動小数点の測定値のリストを持っています。すなわち、測定値[i]は時刻[i]に発生しました。長い2つのデータのペアをフィルタリングします

測定値の中には浮動小数点数ではなく、空の文字列です。

空の文字列であるすべての測定値を除外し、これらの測定値に関連付けられている時間を等価的に除外します。

時間と測定のリストは非常に長いですので、この問題の解決にランタイムで

おかげ因子に素晴らしいことです!

答えて

1

zipリストの理解式を使用して値をフィルタリングすることができます。たとえば、のは、あなたのリストの値があるとしましょう:値はmeasurementリストで''であれば下式

# For demo purpose 
>>> measurement = ['a', 'b', '', 'c', ''] 
>>> time  = [ 1, 2, 3, 4, 5] 

が両方のリストから項目をフィルタリングします。

最終的な値は、あなたの measurementtimeリストで保持
>>> measurement, time = zip(*[(i, j) for i, j in zip(measurement, time) if i !='']) 

は次のようになります。

>>> measurement 
('a', 'b', 'c') 
>>> time 
(1, 2, 4) 
+0

これは素晴らしいです!それは私のために働いた、ありがとう! –

+0

パフォーマンスが懸念されるので、リストの理解の代わりにジェネレータの表現を使用する方が良いアプローチのようです。 –

0

使用zipfilterを。ここでもう2つのリストを解凍しますが、あなたはそうする必要はありません。

from numbers import Number 
time, measurement = zip(*filter(lambda x: isinstance(x[1], Number), zip(time, measurement))) 
関連する問題