You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建支持有序、类Set接口的不同长度唯一整数数组Python结构

解决方案:实现一个存储唯一整数数组的类

这问题我熟,Python原生的set没法直接存列表(列表是不可哈希类型),所以我们可以封装一个自定义类,通过把列表转成可哈希的元组做底层存储,同时对外提供类似set的操作接口,完美满足数组顺序有效、长度可不同、元素唯一的需求。

完整实现代码

class UniqueArraySet:
    def __init__(self):
        # 用元组存数据——元组可哈希,能放进原生set里实现自动去重
        self._storage = set()

    def add(self, array):
        """添加一个整数数组,重复的数组会被自动忽略"""
        # 简单做个类型校验,确保输入是整数列表
        if not isinstance(array, list) or not all(isinstance(num, int) for num in array):
            raise ValueError("只能添加由整数组成的列表")
        self._storage.add(tuple(array))

    def remove(self, array):
        """移除指定的整数数组,数组不存在时会抛出KeyError"""
        tuple_array = tuple(array)
        if tuple_array not in self._storage:
            raise KeyError(f"数组 {array} 不存在于集合中")
        self._storage.remove(tuple_array)

    def __contains__(self, array):
        """支持用 `in` 关键字快速检查数组是否存在"""
        return tuple(array) in self._storage

    def to_list(self):
        """把存储的所有数组转回列表格式返回"""
        return [list(tuple_arr) for tuple_arr in self._storage]

    def clear(self):
        """清空集合里的所有数组"""
        self._storage.clear()

    def __len__(self):
        """返回集合里的唯一数组数量"""
        return len(self._storage)

匹配需求的使用示例

# 你的示例输入
a = [[2, 0, 2], [2, 0, 0, 0], [2, 2, 2, 2], [2, 2, 2, 1, 0, 2], [2, 2, 2, 2], [2, 2, 2, 2]]

# 初始化自定义集合
unique_set = UniqueArraySet()

# 逐个添加数组(重复的会被自动过滤)
for arr in a:
    unique_set.add(arr)

# 获取去重后的结果
result = unique_set.to_list()
print(result)
# 输出:[[2, 0, 2], [2, 0, 0, 0], [2, 2, 2, 2], [2, 2, 2, 1, 0, 2]]

关键细节说明

  • 底层逻辑:借助原生set的去重特性,用元组存储数组(元组保留原数组的顺序、长度信息,同时可哈希),既实现了去重,又不丢失数组的核心属性。
  • 接口友好:实现了add、remove、in判断、长度获取这些和原生set一致的操作,用起来没学习成本。
  • 输入校验:add方法里加了简单的类型检查,避免不小心传入非整数列表导致的问题。

内容的提问来源于stack exchange,提问作者Oleg Dats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 00:32:51