from typing import List


def gen_table_str(class_list: List) -> str:
    """
    给定聚类后的类别列表，返回头展开形式的广义表，用于给Java后台解析
    :param class_list: 聚类后的类别列表，如[1 0 1 1 1 0]
    :return: 头展开形式的广义表，如((0,2,3,4),1,2)
    """
    # 构件越多的放在越里面，所以这里维护几个集合
    # 然后按集合的元素个数从大到小排序，再去生成结果
    # 类别号 -> 构件下标集合
    set_dict = dict()
    for idx, class_id in enumerate(class_list):
        if class_id not in set_dict:
            set_dict[class_id] = set()
        set_dict[class_id].add(idx)
    # 构件下标集合的列表
    set_list = [st for st in set_dict.values()]
    # 按照集合中元素的数量，从大到小排序
    set_list.sort(key=lambda x: len(x), reverse=True)
    # 生成结果的列表表示
    res = []
    for st in set_list:
        if len(res) > 0:
            res = [res]
        res.extend(st)
    # 转成字符串，方括号变成圆括号，再去除多余空格
    return res.__str__().replace('[', '(').replace(']', ')').replace(' ', '')