Python程序:在不使用库set类的情况下定义集合数据结构
假设我们希望实现一个具有以下方法的集合数据结构:
- 构造函数:构造集合的新实例
- 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
- 如果exists(val)为false,则
- 将val插入到buckets[val]的末尾
- 定义一个函数exists()。它将接收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
广告