在 Python 中不使用库集合类的情况下定义集合数据结构的程序

pythonserver side programmingprogramming更新于 2026/1/3 10:52:17

假设我们想要使用以下方法实现集合数据结构 −

  • 构造函数构造集合的新实例
  • add(val) 将整数 val 插入集合中
  • exists(val) 检查 val 是否在集合中
  • remove(val) 从集合中删除 val

因此,如果我们构造一个集合 s,然后调用 s.add(10)、s.add(20)、s.add(10)、s.exists(10)、s.remove(10)、s.exists(10)、s.exists(20),则输出将是

  • 对于 s.add(10),它将插入10
  • 对于 s.add(20),它将插入 20
  • 10 已经在 s 中,因此不会发生任何事情
  • s.exists(10) 将返回 true,因为 10 在那里
  • 通过 s.remove(10) 删除 10
  • s.exists(10) 将返回 false,因为 10 已被删除,并且一个元素只能出现一次
  • s.exists(20) 将返回 true,因为 20 在那里。

为了解决这个问题,我们将遵循以下步骤 −

  • 定义构造函数。
  • buckets := 一个空的映射,它将保存一个数据列表
  • 定义一个函数 add() 。这将采用 val
  • 如果 exist(val) 为 false,则
    • 在 buckets[val] 末尾插入 val
  • 定义一个函数 exist() 。这将采用 val
  • 当 val 在 buckets[val] 中时返回 true,否则返回 false
  • 定义一个函数 remove()。这将采用 val
  • 删除 buckets[val]

示例

让我们看看下面的实现以便更好地理解 −

from collections import defaultdict
class MySet:
   def __init__(self):
      self.buckets = defaultdict(list)

   def add(self, val):
      if not self.exists(val):
         self.buckets[val].append(val)

   def exists(self, val):
      return val in self.buckets[val]

   def remove(self, val):
      del self.buckets[val]

s = MySet()
s.add(10)
s.add(20)
s.add(10)
print(s.exists(10))
s.remove(10)
print(s.exists(10))
print(s.exists(20))

输入

s = MySet()
s.add(10)
s.add(20)
s.add(10)
s.exists(10)
s.remove(10)
s.exists(10)
s.exists(20)

输出

True
False
True

相关文章


有用资源