按列表元素之间的差异对列表元素进行分组

urg*_*geo 6 python grouping list

给定一个列表

A = [1, 6, 13, 15, 17, 18, 19, 21, 29, 36, 53, 58, 59, 61, 63, 78, 79, 81, 102, 114]
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以对连续元素之间的差异小于 3 的所有簇进行分组?

也就是说,获得如下内容:

[13, 15, 17, 19, 21], [58, 59, 61, 63], [78, 79, 81]
Run Code Online (Sandbox Code Playgroud)

我想知道是否存在任何内置函数,但我找不到类似的东西。我试图用 来解决这个groupby问题itertools,但我被困住了。先感谢您。

Rak*_*esh 1

这是一种使用迭代的方法。

前任:

A = [1, 6, 13, 15, 17, 18, 19, 21, 29, 36, 53, 58, 59, 61, 63, 78, 79, 81, 102, 114]
res = []
temp = []
l = len(A)-1

for i,v in enumerate(A):
    if i+1 > l:
        break

    if abs(v - A[i+1]) < 3:
        temp.append(v)
    else:
        if temp:
            temp.append(v)
            res.append(temp)
            temp = []
print(res)
Run Code Online (Sandbox Code Playgroud)

输出:

[[13, 15, 17, 18, 19, 21], [58, 59, 61, 63], [78, 79, 81]]
Run Code Online (Sandbox Code Playgroud)