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