2017-01-11 4 views
0

У меня есть список данных времени, каждое значение которого является значением даты и времени. У меня есть список измерений, которые являются поплавками, чтобы идти вместе с данными времени, то есть измерение [i] произошло во время [i].Фильтр двух длинных парных списков данных

Некоторые измерения не являются поплавками и представляют собой пустые строки.

Я хочу отфильтровать все измерения, которые являются пустыми строками, и эквивалентно отфильтровывать время, связанное с этими измерениями.

Временные и измерения списки довольно длительные, так что было бы здорово фактор во время выполнения в решение этой проблемы

Спасибо!

ответ

1

Вы можете использовать zip с list comprehension выражение, чтобы отфильтровать значения. Например, предположим, что значение списков являются:

# 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) 
+0

Ничего себе это здорово! это сработало для меня, спасибо !!! –

+0

Поскольку производительность является проблемой, использование выражения генератора вместо понимания списка кажется лучшим подходом. –

0

Используйте zip и filter. Здесь я снова распакую два списка, но вам этого не нужно.

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