2017-01-11 20 views
0

我有一個時間數據列表,每個數值都是一個日期時間值。 我有一個測量值列表,它與時間數據一起出現,即測量[i]在時間[i]發生。過濾兩個冗長的配對數據列表

有些測量值不是浮點數,而是空字符串。

我想過濾掉所有空字符串的測量值,並等效地過濾出與這些測量值相關的時間。

的時間和測量列表是相當漫長的,所以這將是巨大的在運行的因素納入解決這個問題

謝謝!

回答

1

您可以使用zip列表理解表達式來過濾值。例如,假設您的列表的價值是:

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

下面的表達式將兩份名單的篩選項目,如果值是measurement列表''

>>> measurement, time = zip(*[(i, j) for i, j in zip(measurement, time) if i !='']) 

最終值保持你measurementtime名單將是:

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

哇,這太棒了!它爲我工作,謝謝! –

+0

由於性能是一個問題,使用生成器表達式而不是列表理解似乎是一種更好的方法。 –

0

使用zipfilter。在這裏我再次解壓這兩個列表,但你不需要。

from numbers import Number 
time, measurement = zip(*filter(lambda x: isinstance(x[1], Number), zip(time, measurement)))