【问题标题】:Filter two lengthy paired lists of data过滤两个冗长的配对数据列表
【发布时间】:2017-01-11 19:55:20
【问题描述】:

我有一个时间数据列表,每个值都是一个日期时间值。 我有一个与时间数据一起浮动的测量列表,即测量[i]发生在时间[i]。

有些测量值不是浮点数,而是空字符串。

我想过滤掉所有空字符串的测量值,并等效地过滤掉与这些测量值相关的时间。

时间和测量列表很长,因此最好将运行时间因素纳入解决此问题的解决方案

谢谢!

【问题讨论】:

    标签: python list filter runtime simultaneous


    【解决方案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)
    

    【讨论】:

    • 由于性能是一个问题,使用生成器表达式而不是列表推导似乎是一种更好的方法。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 2018-06-13
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      相关资源
      最近更新 更多