**

python入门–容器定义以及常见方法

1.什么是容器,为什么学习容器?

容器:可以存放多个元素的一种数据类型
补充变量无法存储大量数据的缺陷

2.python提供的容器:

列表(list)、集合(set)、元组(tuple)、字典(dict)

3.列表–list

线性表:

数组:数组是连续内存的结构,python是没有数组的,数组查询速度特别快、增删改效率比较差

栈:LIFO–last in first out(先进后出,后进先出)

队列:FIFO–first in first out(先进先出,后进后出)

链表:(数组不断的在堆中开辟内存,会造成一些细碎的内存块,而没办法被数组所用,因此就有链表将所有细碎的内存块(充当整个线性结构的每个节点)连在一起利用起来–内存是不断开辟不断释放的过程)–增删改的效率很高,查询比较慢

单向链表:内存节点会分为两部分(用来存数据、下一个节点的内存地址)–只能找到下一个节点—节约内存

双向链表:内存节点会分为三部分(上一个节点的内存地址、用来存数据、下一个节点的内存地址)–可以在任何一个节点找到上一个节点和下一个节点–浪费一点内存–使用更广泛

Python的列表这种容器就是基于双向链表实现的

列表底层的实现是基于线性表–双向链表

列表的定义:

由弱数据类型语言决定,直接将值赋给变量:

在容器中安装python_元组

在容器中安装python_数组_02


全局函数list:

在容器中安装python_键值对_03

在容器中安装python_元组_04


容器中的每一个值,都叫做元素

如何访问元素?—列表是有序的

使用下标来访问,注意下标是从0开始,超出就会报错

可以通过下标访问元素

在容器中安装python_数组_05

在容器中安装python_python_06


也可以通过下标来修改元素值

在容器中安装python_键值对_07


求列表的长度:

全局函数len(容器) #返回容器的长度

在容器中安装python_数组_08


如何遍历容器?

while循环:

在容器中安装python_数组_09


for循环:

在容器中安装python_元组_10


列表中常见的方法

[‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]

append() #向列表尾部追加元素(Append object to the end of the list.)

在容器中安装python_键值对_11


insert() #向指定的位置追加的元素

如:追加到lss中3之前(Insert object before index.)

在容器中安装python_在容器中安装python_12


sort() #排序(一般用来排序数字)

在容器中安装python_数组_13


index() #查找元素第一次在列表中出现的位置,如果没有这个元素,则抛出异常

在容器中安装python_键值对_14

在容器中安装python_在容器中安装python_15


reverse() #将列表元素顺序反转

在容器中安装python_数组_16


remove() #通过元素来移除元素,注意,如果元素不存在,则抛出异常(如删除重复的元素只删除第一次在列表中出现的那一个)

在容器中安装python_python_17

在容器中安装python_python_18


count() #统计元素的个数

在容器中安装python_数组_19


clear() #清除元素

在容器中安装python_键值对_20


copy() #浅拷贝对象,是在堆内存中进行对象拷贝的(copy的结果地址也改变了,并不影响原来的对象,而赋值只是复制了地址,对应的对象的还是原来的)

Return a shallow copy of the list.

在容器中安装python_数组_21

在容器中安装python_元组_22


第一个复制了对象,第二个复制了地址

extend() #合并列表

在容器中安装python_在容器中安装python_23


pop() #删除最后的元素,并返回这个元素

在容器中安装python_元组_24


内存模型:

栈(stack)、堆(heap)

4.集合(set)

创建一个集合:

由弱数据类型语言决定,直接将值赋给变量:

如果使用空的{}来创建一个对象,该对象是字典,并不是集合,如下图1

如果使用{},里面至少有一个元素,此时才是集合,如下图2

在容器中安装python_在容器中安装python_25

在容器中安装python_在容器中安装python_26


使用全局函数set来创建一个集合

在容器中安装python_在容器中安装python_27

在容器中安装python_数组_28

集合的底层是基于hash表实现的
不能重复的,也就意味着集合中的元素都是唯一的
无序,集合不支持索引,不能通过下标访问元素
如上图
遍历循环和列表同理

集合中常见的方法:

[‘add’, ‘clear’, ‘copy’, ‘difference’, ‘difference_update’, ‘discard’, ‘intersection’, ‘intersection_update’, ‘isdisjoint’, ‘issubset’, ‘issuperset’, ‘pop’, ‘remove’, ‘symmetric_difference’, ‘symmetric_difference_update’, ‘union’, ‘update’]

add() #增加不存在的元素,已存在的添加不了,无序的,根据hash算法

在容器中安装python_数组_29


difference() #差集

在容器中安装python_元组_30


intersection() #交集

在容器中安装python_元组_31


union() #并集

在容器中安装python_数组_32


update() #更新集合,合并集合—s集合本身发生了变化

在容器中安装python_元组_33


discard() #移除元素,但如果结果不存在,则不做任何操作

在容器中安装python_键值对_34


跟列表相同的方法就不赘述了

5.元组(tuple)

定义:通过弱数据类型

在容器中安装python_在容器中安装python_35

在容器中安装python_python_36

在容器中安装python_数组_37


如果元组里只有一个元素,必须加逗号,否则创建的不是元组

通过tuple全局函数创建元组

在容器中安装python_在容器中安装python_38

在容器中安装python_数组_39


通过下标来访问元素,超出下标报错

在容器中安装python_在容器中安装python_40

在容器中安装python_元组_41


元组的特点

元组是一个不可变类型,元组的元素一旦定义下来,则无法改变

注意:虽然元组不可变,但如果元组内部元素是可变类型,那么该元组就是可变的

在容器中安装python_数组_42


常见方法

index() #查找元素第一次在列表中出现的位置,如果没有这个元素,则抛出异常

在容器中安装python_数组_43


count() #统计元素的个数

在容器中安装python_python_44

6.字典(dict)

键值对形式存储的(key一一对应value)

定义:

弱数据类型决定

在容器中安装python_python_45

在容器中安装python_python_46

全局函数dict()

在容器中安装python_数组_47


如何访问值

通过key来访问对应的值

字典对象[key] #返回key对应的值,如果没有,抛出异常

在容器中安装python_python_48


字典对象[key] = 新值 #修改key对应的值

在容器中安装python_在容器中安装python_49


字典对象[新key] = 新值 #增加新的键值对

在容器中安装python_键值对_50


常见方法

[‘clear’, ‘copy’, ‘fromkeys’, ‘get’, ‘items’, ‘keys’, ‘pop’, ‘popitem’, ‘setdefault’, ‘update’, ‘values’]

get() #和字典对象[key]类似,获取键对应值,注意,如果没该键,则返回None

在容器中安装python_数组_51


keys() #返回所有的键

在容器中安装python_在容器中安装python_52


values() #返回所有的值

在容器中安装python_python_53


Setdefault() #设置一个默认值

在容器中安装python_元组_54


items() #返回所有键值对–可以用于遍历字典

在容器中安装python_元组_55


pop() #通过key删除键值对,并返回键对应的值,如果没有会抛出异常

在容器中安装python_python_56


在容器中安装python_python_57


popitem() #移除一个键值对,并返回这个键值对,移除的规则是LIFO(last in first out)

在容器中安装python_元组_58


字典的遍历

第一种

for key in d.keys():

print(key, d[key])

在容器中安装python_数组_59


第二种:–本质和第一种一样,d调用的就是d.keys()这个方法

for key in d:

print(key, d.get(key))

在容器中安装python_在容器中安装python_60


第三种

for k,v in d.items():

print(k, v)

在容器中安装python_python_61


在容器中安装python_在容器中安装python_62