我有一个包含以下信息的数据集。 timebin
变量是数据时间段的标识符。可以假设timebin
是唯一且没有任何间隙的(即如果数据包含1和3,则数据将始终包含2)。
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中是否有更优雅高效的方法吗?
答案 0 :(得分: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 :(得分: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]]
答案 2 :(得分: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]]