【发布时间】:2026-02-10 19:45:01
【问题描述】:
给定一个列表
A = [1, 6, 13, 15, 17, 18, 19, 21, 29, 36, 53, 58, 59, 61, 63, 78, 79, 81, 102, 114]
有没有一种简单的方法可以将连续元素之间的差异小于 3 的所有簇分组?
也就是说,获得类似的东西:
[13, 15, 17, 19, 21], [58, 59, 61, 63], [78, 79, 81]
我想知道是否存在任何内置函数,但我找不到类似的东西。我试图使用itertools 的groupby 来解决这个问题,但我被卡住了。提前谢谢你。
【问题讨论】:
-
那么您是否忽略了任何少于 3 个元素的组?
-
好吧,我不会忽视他们。在这个数组中,没有两个独立元素的差异小于 3。如果有,也可以将它们分组。我正在寻找类似“直到”或“同时”之类的东西,区别是 X,然后将它们分组。
-
那么,1 和 6 不应该被认为是单例集群吗?
-
没必要。但是,如果您愿意,您可以将它们保留为单例集群,我可以根据它们的长度在第二时刻忽略它们。重要的是“存储元素直到”条件满足:)
-
关于“存储元素直到”
itertools.takewhile正是这样做的。