从set类型继承,并设计一个名为CountedSet的子类型。通过重载set类型的某些函数,使得CountedSet对象 可以统计并记录各个元素被放入集合的总次数。请通过裁判测试程序了解该类的接口。 【样例输入】 a b a q 【样例输出】 Element Count a - 2 b - 1 Count in Set: 2
时间: 2023-07-16 18:17:11 浏览: 230
以下是CountedSet类的实现:
```python
from collections import defaultdict
class CountedSet(set):
def __init__(self, iterable=()):
super().__init__(iterable)
self.counter = defaultdict(int)
for item in iterable:
self.counter[item] += 1
def add(self, elem):
super().add(elem)
self.counter[elem] += 1
def remove(self, elem):
if elem in self:
super().remove(elem)
self.counter[elem] -= 1
if self.counter[elem] == 0:
del self.counter[elem]
def __contains__(self, elem):
return elem in self.counter
def __iter__(self):
return iter(self.counter)
def __len__(self):
return len(self.counter)
def __str__(self):
result = []
for elem in self.counter:
result.append(f'{elem} - {self.counter[elem]}')
return '\n'.join(result) + f'\nCount in Set: {len(self)}'
```
CountedSet类继承自set类,并通过重载add、remove、__contains__和__iter__等函数,实现了对元素的计数。其中,add函数在元素被添加到集合中时增加计数,remove函数在元素被从集合中删除时减少计数,__contains__函数判断元素是否在计数器中,__iter__函数返回计数器中所有元素的迭代器。此外,还实现了__len__函数和__str__函数,分别返回集合中元素的数量和以字符串形式表示的计数器信息。
以下是一个简单的测试程序:
```python
s = CountedSet()
s.add('a')
s.add('b')
s.add('a')
s.add('q')
print(s)
s.remove('a')
print(s)
```
输出如下:
```
a - 2
b - 1
q - 1
Count in Set: 3
a - 1
b - 1
q - 1
Count in Set: 3
```