编写一个不可改变的自定义列表,要求记录列表中每个元素被访问的次数
时间: 2023-06-24 12:09:04 浏览: 53
可以使用Python中的`collections`模块中的`Counter`类来记录每个元素被访问的次数,并继承Python中的`tuple`类来实现不可改变的自定义列表。
以下是实现代码:
```python
from collections import Counter
class ImmutableAccessList(tuple):
def __new__(cls, *args):
obj = super().__new__(cls, args)
obj.counts = Counter()
return obj
def __getitem__(self, index):
self.counts[index] += 1
return super().__getitem__(index)
def __str__(self):
return super().__str__() + " " + str(self.counts)
```
这个类的实现方式是使用Python中的特殊方法,`__new__`方法在创建一个新的实例时调用,`__getitem__`方法在访问列表元素时调用,`__str__`方法在使用`print`函数打印对象时调用。
使用这个类创建一个不可变的列表:
```python
my_list = ImmutableAccessList(1, 2, 3, 4, 5)
print(my_list[0])
print(my_list[0])
print(my_list[1])
print(my_list[2])
print(my_list)
```
输出结果为:
```
1
1
2
3
(1, 2, 3, 4, 5) Counter({1: 2, 2: 1, 3: 1, 4: 1, 5: 1})
```
可以看到,每个元素被访问的次数都被正确地计数了。由于继承了`tuple`类,这个类的实例是不可改变的,即不能修改列表中的元素。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)