from typing import Any, Iterable, Tuple


def 保序去交集(元组数据: Tuple[Any, ...], 需要去除成员组: Iterable[Any]):
    """从元组中移除另一组成员，保持原顺序。

    功能说明:
        - 这个函数用于从元组中移除另一组成员，保持原顺序。
        - 它会在处理成员关系的同时，尽量保留原始元组中的先后顺序。
        - 适合既想做筛选或比对，又不希望把原来的顺序打乱的场景。

    Args:
        元组数据: 原始元组。
        需要去除成员组: 需要去除的成员序列。

    Returns:
        成功时返回处理后的新元组；失败时返回空元组 ``()``。
    """
    try:
        if not isinstance(元组数据, tuple):
            return ()

        去除列表 = tuple(需要去除成员组)
        if not 去除列表:
            return 元组数据

        return tuple(元素 for 元素 in 元组数据 if 元素 not in 去除列表)
    except Exception:
        return ()


if __name__ == "__main__":
    print("===== 示例1：基础去交集 =====")
    数据 = (1, 2, 3, 4, 5)
    print("结果:", 保序去交集(数据, (2, 4)))

    print("\n===== 示例2：去除成员不存在 =====")
    数据 = ("a", "b", "c")
    print("结果:", 保序去交集(数据, ("x", "y")))

    print("\n===== 示例3：去除列表为空 =====")
    数据 = ("a", "b", "c")
    print("结果:", 保序去交集(数据, ()))

    print("\n===== 示例4：存在重复成员 =====")
    数据 = ("a", "b", "a", "c", "b")
    print("结果:", 保序去交集(数据, ("a",)))

    print("\n===== 示例5：复杂对象去除 =====")
    数据 = ([1], {"x": 1}, [2], {"x": 1})
    print("结果:", 保序去交集(数据, ({"x": 1},)))

    print("\n===== 示例6：应用场景-从权限列表中移除禁用权限 =====")
    当前权限 = ("查看", "编辑", "导出", "管理员")
    禁用权限 = ("导出", "管理员")
    print("结果:", 保序去交集(当前权限, 禁用权限))



