2016-02-17 3 views
0

У меня есть набор данных со следующей информацией. Переменная timebin является идентификатором для периода времени данных. Можно предположить, что timebin является уникальным и без пробелов (т. Е. Данные всегда будут содержать 2, если они содержат 1 и 3).Создание перекрывающихся последовательностей

timebin,lat,lon 
0,9.0,2.0 
1,12.0,4.0 
2,15.0,6.0 
3,18.0,8.0 
4,21.0,10.0 
5,24.0,12.0 
6,27.0,14.0 
7,30.0,16.0 

Я хочу, чтобы генерировать все последовательности фиксированной длины l с количеством перекрытия o. Например, для l=4 и o=2 следующие группы показателей будет выход:

[[0,1,2,3], [2,3,4,5], [4,5,6,7]] 

Это может быть сделано с помощью цикла, но мне интересно, если есть более элегантный и эффективный способ сделать это в Python?

+1

Почему вы останавливаетесь на 7? –

+0

Это было просто для того, чтобы держать пример коротким :) – pir

+0

ОК, теперь я вижу, что ваши данные колеблются от 0 до 7. Вот почему :) –

ответ

1

Использование списка понимание:

l = 4 
o = 2 
e = 7 

print([[x for x in range(s, s + l)] for s in range(0, e, o) if s + l <= e + 1]) 

Результат:

[[0, 1, 2, 3], [2, 3, 4, 5], [4, 5, 6, 7]] 
1
overlap = 2 
data = [0, 1, 2 ,3 ,4, 5 ,6 ,7] 
groups = [data[i: i + overlap * 2] for i in range(len(data) - overlap * 2 + 1)] 
1

ли остальная часть предоставленных данных, связанных каким-либо образом? Просто из вашего вопроса, вы можете создать эти последовательности с list comprehensions:

>>> l = 4 
>>> o = 2 
>>> [[x for x in range(s, s+l)] for s in range(20)[::(l-o)]] 
[0, 1, 2, 3], [2, 3, 4, 5], [4, 5, 6, 7], [6, 7, 8, 9], [8, 9, 10, 11], 
[10, 11, 12, 13], [12, 13, 14, 15], [14, 15, 16, 17], [16, 17, 18, 19], 
[18, 19, 20, 21]] 
Смежные вопросы