【发布时间】:2018-11-12 16:00:19
【问题描述】:
假设我有以下列表:
a = [True, True, True, False, False, False, False, True, True]
如何通过仅返回 0、3、7 或类似以下的分组来对它们进行最佳分组?
[True, True, True]
[False, False, False, False]
[True, True]
背景:我正在尝试在我的 NumPy 数组中找到平稳期,虽然将导数设置为零是一个好的开始,但我仍然需要将数组排序成块。我认为这基本上归结为上述问题。
我查找了 NumPy 和 itertools(试图从问题 NumPy grouping using itertools.groupby performance 中获得解决方案)但我没有成功。我想有人可能会使用itertools.takewhile 和 filtfalse 的组合(请参阅文档here),但我对此并不了解。或者我只是想得太复杂了。
【问题讨论】:
-
itertools.groupby无疑是最明显的原生 python 方式来做到这一点,你到底有什么问题?速度、内存还是其他? -
技能,我只是没有设法找到使用 itertools.groupby 的解决方案
-
[list(g) for _,g in itertools.groupby(a)]创建列表...但我想获取索引不是那么方便,也许是[next(g)[0] for _,g in itertools.groupby(enumerate(a), key=lambda x: x[1])]