如何在python中实现一个自定义的列表或字典

Python012

如何在python中实现一个自定义的列表或字典,第1张

在很多的python库之中,我们可以看到有的时候,库作者会使用一些很特殊的“列表”或者“字典”。虽然他们看起来很像是一个列表或者字典,但是使用的方法却又不一样,这是因为那不是真的python中原本的列表和字典,而是作者自己创建的。那么,我们如何可以创建我们自己的列表和字典呢?

前后都使用两个下划线的方法,一般被称之为魔法方法,比如我们常见的 init ,就是一种魔法方法。一般来说,我们自行定义变量名的时候,不要定义很像是魔法方法的变量名。魔法方法被定义后,可以在适当的时候自动被调用,一般不需要手动对其进行调用。

在python中,实现一个序列,我们需要以下四种魔法方法

另外,一般来说,错误的键应当引发TypeError异常,而错误的索引应当引发IndexError异常

在python的列表中,只能够使用数字作为索引,如果使用字符串的数字的话,那么会引发异常。因此,我们可以尝试一下,对原始的列表进行扩充,使其可以接受字符串作为列表的索引。

注意,这样的自建列表,存在很多问题,几乎全部的关于列表的方法都不能再被使用了。

为了解决正常列表的方法不能再被使用,我们可以考虑直接继承list,以此得到普通列表的所有方法。

一、list

list是python内置的有序的列表,可以随时添加和删除其中的元素

1、 定义

list_name = ["param1","param2","param3"]

2、访问

1)用索引来访问,索引从0开始

索引不可以越界,否则会报错,最后一个元素的索引是len(city) - 1

2)还可以从后开始访问 最后一个元素的索引为-1 依次类推,第一个元素的索引为-len(city)

>>>city[-1]

>>>'广州'

3、元素的追加

4、元素的插入

在city的索引1处增加 重庆

>>>city.insert(1,'重庆')

>>>city

>>>['北京', '重庆', '上海', '广州', '南京']

5、元素的删除

1)删除末尾

2)删除指定位置元素 pop(i),i为索引值

6、元素的替换

7、二维list

访问的时候 我们就可以直接 city[1][0] city[1][1]来访问 其中的元素值

二、tuple(元组)

tupe和list的最大的区别就是 tuple一旦被创建 就无法修改

1、定义

2、访问

和list是一样的 country[0],country[1]。由于tuple是不可变的,所以没有append 和insert 函数

3、 一个元素的tuple

我们发现 当tuple的元素只有一个元素的时候,python会认为括号就是小括号的功能,就会按照整数或者字符串解析,为了解决这个问题,python规定这种情况 在后面加一个逗号','就可以

4、 tuple的指向不变

你会惊讶,怎么可以变了呢??

其实在python内部,c[0],c[1]指向 1 和 2,而c[2]是指向的一个list对象,其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变.