やっぱり気になったので、こちらの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はシンドイ・・・・。