**
python入门–容器定义以及常见方法
1.什么是容器,为什么学习容器?
容器:可以存放多个元素的一种数据类型
补充变量无法存储大量数据的缺陷
2.python提供的容器:
列表(list)、集合(set)、元组(tuple)、字典(dict)
3.列表–list
线性表:
数组:数组是连续内存的结构,python是没有数组的,数组查询速度特别快、增删改效率比较差
栈:LIFO–last in first out(先进后出,后进先出)
队列:FIFO–first in first out(先进先出,后进后出)
链表:(数组不断的在堆中开辟内存,会造成一些细碎的内存块,而没办法被数组所用,因此就有链表将所有细碎的内存块(充当整个线性结构的每个节点)连在一起利用起来–内存是不断开辟不断释放的过程)–增删改的效率很高,查询比较慢
单向链表:内存节点会分为两部分(用来存数据、下一个节点的内存地址)–只能找到下一个节点—节约内存
双向链表:内存节点会分为三部分(上一个节点的内存地址、用来存数据、下一个节点的内存地址)–可以在任何一个节点找到上一个节点和下一个节点–浪费一点内存–使用更广泛
Python的列表这种容器就是基于双向链表实现的
列表底层的实现是基于线性表–双向链表
列表的定义:
由弱数据类型语言决定,直接将值赋给变量:
全局函数list:
容器中的每一个值,都叫做元素
如何访问元素?—列表是有序的
使用下标来访问,注意下标是从0开始,超出就会报错
可以通过下标访问元素
也可以通过下标来修改元素值
求列表的长度:
全局函数len(容器) #返回容器的长度
如何遍历容器?
while循环:
for循环:
列表中常见的方法
[‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]
append() #向列表尾部追加元素(Append object to the end of the list.)
insert() #向指定的位置追加的元素
如:追加到lss中3之前(Insert object before index.)
sort() #排序(一般用来排序数字)
index() #查找元素第一次在列表中出现的位置,如果没有这个元素,则抛出异常
reverse() #将列表元素顺序反转
remove() #通过元素来移除元素,注意,如果元素不存在,则抛出异常(如删除重复的元素只删除第一次在列表中出现的那一个)
count() #统计元素的个数
clear() #清除元素
copy() #浅拷贝对象,是在堆内存中进行对象拷贝的(copy的结果地址也改变了,并不影响原来的对象,而赋值只是复制了地址,对应的对象的还是原来的)
Return a shallow copy of the list.
第一个复制了对象,第二个复制了地址
extend() #合并列表
pop() #删除最后的元素,并返回这个元素
内存模型:
栈(stack)、堆(heap)
4.集合(set)
创建一个集合:
由弱数据类型语言决定,直接将值赋给变量:
如果使用空的{}来创建一个对象,该对象是字典,并不是集合,如下图1
如果使用{},里面至少有一个元素,此时才是集合,如下图2
使用全局函数set来创建一个集合
集合的底层是基于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算法
difference() #差集
intersection() #交集
union() #并集
update() #更新集合,合并集合—s集合本身发生了变化
discard() #移除元素,但如果结果不存在,则不做任何操作
跟列表相同的方法就不赘述了
5.元组(tuple)
定义:通过弱数据类型
如果元组里只有一个元素,必须加逗号,否则创建的不是元组
通过tuple全局函数创建元组
通过下标来访问元素,超出下标报错
元组的特点
元组是一个不可变类型,元组的元素一旦定义下来,则无法改变
注意:虽然元组不可变,但如果元组内部元素是可变类型,那么该元组就是可变的
常见方法
index() #查找元素第一次在列表中出现的位置,如果没有这个元素,则抛出异常
count() #统计元素的个数
6.字典(dict)
键值对形式存储的(key一一对应value)
定义:
弱数据类型决定
全局函数dict()
如何访问值
通过key来访问对应的值
字典对象[key] #返回key对应的值,如果没有,抛出异常
字典对象[key] = 新值 #修改key对应的值
字典对象[新key] = 新值 #增加新的键值对
常见方法
[‘clear’, ‘copy’, ‘fromkeys’, ‘get’, ‘items’, ‘keys’, ‘pop’, ‘popitem’, ‘setdefault’, ‘update’, ‘values’]
get() #和字典对象[key]类似,获取键对应值,注意,如果没该键,则返回None
keys() #返回所有的键
values() #返回所有的值
Setdefault() #设置一个默认值
items() #返回所有键值对–可以用于遍历字典
pop() #通过key删除键值对,并返回键对应的值,如果没有会抛出异常
popitem() #移除一个键值对,并返回这个键值对,移除的规则是LIFO(last in first out)
字典的遍历
第一种
for key in d.keys():
print(key, d[key])
第二种:–本质和第一种一样,d调用的就是d.keys()这个方法
for key in d:
print(key, d.get(key))
第三种
for k,v in d.items():
print(k, v)