【发布时间】:2016-11-04 05:19:37
【问题描述】:
itertools python 模块为迭代器实现了一些基本的构建块。正如他们所说,“它们形成了一个迭代器代数”。我期待,但我找不到使用该模块进行以下迭代的简洁方法。给定一个有序实数列表,例如
a = [1.0,1.5,2.0,2.5,3.0]
...返回一个新列表(或只是迭代)按一些n 值分组,比如2
b = [(1.0,1.5),(1.5,2.0),(2.0,2.5),(2.5,3.0)]
我发现这样做的方法如下。首先将列表一分为二,带有偶数和赔率索引:
even, odds = a[::2], a[1::2]
然后构造新列表:
b = [(even, odd) for even, odd in zip(evens, odds)]
b = sorted(b + [(odd, even) for even, odd in zip(evens[1:], odds)])
本质上,它类似于移动均值。
是否有简洁的方法(使用或不使用 itertools)?
PS:
应用程序
将a 列表想象为实验期间发生的某些事件的时间戳集:
timestamp event
47.8 1a
60.5 1b
67.4 2a
74.5 2b
78.5 1a
82.2 1b
89.5 2a
95.3 2b
101.7 1a
110.2 1b
121.9 2a
127.1 2b
...
此代码用于根据不同的时间窗口对这些事件进行分段。现在我对2连续事件之间的数据感兴趣; 'n > 2' 仅用于探索目的。
【问题讨论】: