过滤两个冗长的成对数据列表

Filter two lengthy paired lists of data

我有一个时间数据列表,每个值都是一个日期时间值。 我有一个测量值列表,这些测量值是随时间数据一起浮动的,即测量值 [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 !=''])

您的 measurementtime 列表的最终值将是:

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

使用 zipfilter。这里我再次解压两个列表,但你不必解压。

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