将列表中的连续数字组合在一起

Muh*_*aza 5 python list

我有一个有序的 Python 表单列表:

[1, 2, 3, 4, 5, 12, 13, 14, 15, 20, 21, 22, 23, 30, 35, 36, 37, 38, 39, 40]
Run Code Online (Sandbox Code Playgroud)

如何将列表中的连续数字分组在一起。像这样的一个团体:

[[1, 2, 3, 4, 5], [12, 13, 14, 15], [20, 21, 22, 23,], [30], [35, 36, 37, 38, 39, 40]]
Run Code Online (Sandbox Code Playgroud)

我尝试从这里使用 groupby但无法根据我的需要定制它。谢谢,

sha*_*678 6

您可以使用负索引:

def group_by_missing(seq):
    if not seq:
        return seq
    grouped = [[seq[0]]]
    for x in seq[1:]:
        if x == grouped[-1][-1] + 1:
            grouped[-1].append(x)
        else:
            grouped.append([x])
    return grouped
Run Code Online (Sandbox Code Playgroud)

用法示例:

>>> lst = [1, 2, 3, 4, 5, 12, 13, 14, 15, 20, 21, 22, 23, 30, 35, 36, 37, 38, 39, 40]
>>> group_by_missing(lst)
[[1, 2, 3, 4, 5], [12, 13, 14, 15], [20, 21, 22, 23], [30], [35, 36, 37, 38, 39, 40]]
Run Code Online (Sandbox Code Playgroud)