2015-08-11 3 views
3

У меня есть два списка, каждый из которых содержит объекты, которые имеют свойство gps_seconds.Pythonic способ сопоставления временных меток в списке объектов

Будет период времени, когда свойство gps_seconds выстроится вверх, и я хотел бы обрезать два списка, чтобы у меня были отдельные списки с общими временными метками.

Например, в списке A объектов я мог бы gps_seconds параметров:

 
99.8 
99.9 
100.0 
100.1 
100.2 

Список B может иметь:

 
99.9 
100.0 
100.1 
100.2 
100.3 

В этом случае я хотел бы, чтобы удалить первую запись из A и окончательную запись от B, чтобы гарантировать, что метки времени обоих списков совпадают правильно.

Я попытался использовать довольно неэлегантный метод, но похоже, что может быть питонический способ сделать это быстро, о чем я не знаю.

ответ

4

Это должно работать:

set1 = set([99.8, 99.9, 100.0, 100.1, 100.2]) 
set2 = set([99.9, 100.0, 100.1, 100.2, 100.3]) 
res = set1 & set2 
print res 

Operator & на множествах возвращает пересечение множеств.

+0

Спасибо, теперь это составляет основу для моего решения. Теперь мне приходится иметь дело с тем, что один тактный дрейф по отношению к другому! – James

1

Вы можете сделать это с помощью списка понимания, но с использованием in для этого может быть не самым быстрым способом ...

list1 = [99.8, 
99.9, 
100.0, 
100.1, 
100.2] 

list2 = [99.9, 
100.0, 
100.1, 
100.2, 
100.3] 

[a for a in [b for b in list1 if b in list2] if a in list1] 

который возвращает

[99.9, 100.0, 100.1, 100.2] 
0

Вы можете использовать наборы:

>>> list_A = [99.8, 99.9, 100.0, 100.1, 100.2] 
>>> list_B = [99.9, 100.0, 100.1, 100.2, 100.3] 
>>> sorted(set(list_A).intersection(list_B)) 
[99.9, 100.0, 100.1, 100.2] 

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

Смежные вопросы