C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

リスト内の値を連番毎にグループ分けする

やっぱり気になったので、こちらのpython版です。
配列内の値を連番毎にグループ分けする - C#ATIA

# Fusion360API Python script
# 連番をグループ化

import traceback
import adsk.core as core

def run(context):
    ui = core.UserInterface.cast(None)
    try:
        app: core.Application = core.Application.get()
        ui = app.userInterface

        lst = [1, 2, 3, 5, 6, 9, 10, 13]

        print(
            get_result_txt(
                group_by_consecutive_numbers(lst)
            )
        )

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))


def group_by_consecutive_numbers(
    lst: list) -> list:

    clone = [v for v in lst]
    clone.append(-1)

    groups = []
    startIdx = 0

    for idx in range(len(clone) - 1):
        if clone[idx] + 1 != clone[idx + 1]:
            groups.append(clone[startIdx : idx + 1])
            startIdx = idx + 1

    return groups


def get_result_txt(
    lst: list) -> str:

    msgLst = []

    for ary in lst:
        if len(ary) < 2:
            msgLst.append(f'{ary[0]}')
        else:
            msgLst.append(f'{ary[0]} - {ary[-1]}')

    return '\n'.join(msgLst)

結果はこちらです。

1 - 3
5 - 6
9 - 10
13

半分どころじゃなかったですね。もうちょっと良いアルゴリズム
あるような気もしますが、基本的にVBAと同じにしています。

比較してもしょうがないのですが、
・宣言と同時に初期化
・リストの柔軟性(拡張とスライスの存在)
が大きいかな? pythonに慣れると、さすがにVBAはシンドイ・・・・。