我有一個時間數據列表,每個數值都是一個日期時間值。 我有一個測量值列表,它與時間數據一起出現,即測量[i]在時間[i]發生。過濾兩個冗長的配對數據列表
有些測量值不是浮點數,而是空字符串。
我想過濾掉所有空字符串的測量值,並等效地過濾出與這些測量值相關的時間。
的時間和測量列表是相當漫長的,所以這將是巨大的在運行的因素納入解決這個問題
謝謝!
我有一個時間數據列表,每個數值都是一個日期時間值。 我有一個測量值列表,它與時間數據一起出現,即測量[i]在時間[i]發生。過濾兩個冗長的配對數據列表
有些測量值不是浮點數,而是空字符串。
我想過濾掉所有空字符串的測量值,並等效地過濾出與這些測量值相關的時間。
的時間和測量列表是相當漫長的,所以這將是巨大的在運行的因素納入解決這個問題
謝謝!
您可以使用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 !=''])
最終值保持你measurement
和time
名單將是:
>>> measurement
('a', 'b', 'c')
>>> time
(1, 2, 4)
使用zip
和filter
。在這裏我再次解壓這兩個列表,但你不需要。
from numbers import Number
time, measurement = zip(*filter(lambda x: isinstance(x[1], Number), zip(time, measurement)))
哇,這太棒了!它爲我工作,謝謝! –
由於性能是一個問題,使用生成器表達式而不是列表理解似乎是一種更好的方法。 –