容器
容器的概念:
1、什么是容器,为什么学习容器
容器:可以存放多个元素的一种数据类型
补充变量的无法存储大量数据的缺陷
2、python也提供容器
- 列表(list)
- 集合(set)
- 元组(tuple)
- 字典(dict)
列表------(list)
- 线性表:
- 数组:数组是连续内存的结构,python是没有数组的
- 栈:先进后出
- 队列:先进先出
- 链表:
- 单向链表:只能查询下一个节点
- 双向链表:有头结点和尾节点,可以查前后节点
- python的列表这种容器就是基于双向链表实现的
列表的定义:
直接由弱数据类型语言决定,直接将值赋给变量:
如:ls = [2, 3, 4, 5]
全局函数 list
ls = list ( )
ls = list ([1, 2, 3, 4, 5])
如何访问元素:
使用下标来访问, 注意下表是从0开始的
求列表的长度:
全局函数: len(容器) #返回的是容器的长度
列表中常见的方法:
[‘add’, ‘class’, ‘contains’, ‘delattr’, ‘delitem’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘getitem’, ‘gt’, ‘hash’, ‘iadd’, ‘imul’, ‘init’, ‘init_subclass’, ‘iter’, ‘le’, ‘len’, ‘lt’, ‘mul’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘reversed’, ‘rmul’, ‘setattr’, ‘setitem’, ‘sizeof’, ‘str’, ‘subclasshook’, ]
[‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]
append() #向尾部追加
insert() #向指定的位置追加元素
sort() #排序 (一般用来排序数字)
index() #返回元素第一次在列表中出现的位置(如果没有这个元素则跑出异常)
reverse() #将列表元素翻转
remove() #移除某元素(不是下标!!)
count() #统计元素个数
clear() #清除元素
copy() #浅拷贝(重新开辟一片空间或内存,用来拷贝) 而(=)赋值的时候是只赋地址值
extend() #合并列表
pop() #删除最后一个元素,并返回这个元素
集合------(set)
集合(set):
- 常见的一个集合
- s = set( ) # 使用全局函数来创建一个集合
- s = set( { 1, 3, 4, 5} ) # 创建集合,并赋值
- s = { } # 如果使用的是空的{}来创建一个对象,该对象是字典,并不是集合
- s = {元素} # {}至少要有一个元素,才是集合
- 集合的底层基于hash表实现的
- 不能重复的,也就意味着集合中的元素都是唯一的
- 无序
[‘and’, ‘class’, ‘contains’, ‘delattr’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’, ‘hash’, ‘iand’, ‘init’, ‘init_subclass’, ‘ior’, ‘isub’, ‘iter’, ‘ixor’, ‘le’, ‘len’, ‘lt’, ‘ne’, ‘new’, ‘or’, ‘rand’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘ror’, ‘rsub’, ‘rxor’, ‘setattr’, ‘sizeof’, ‘str’, ‘sub’, ‘subclasshook’, ‘xor’]
集合的常见方法:
[‘add’, ‘clear’, ‘copy’, ‘difference’, ‘difference_update’, ‘discard’, ‘intersection’, ‘intersection_update’, ‘isdisjoint’, ‘issubset’, ‘issuperset’, ‘pop’, ‘remove’, ‘symmetric_difference’, ‘symmetric_difference_update’, ‘union’, ‘update’]
clear
remove
copy
add #增加元素,但不增加重复的元素
difference #差集
intersection # 交集
union # 并集
update #更新集合,合并集合
discard # 移除元素,但是如果不存在,则不做任何操作
元组------(tuple)
元组(tuple)
- 定义:
- 通过弱数据类型
- t = (元素…)
- tuple全局函数
- tt = tuple()
- tt = tuple((元素…))
- 通过下标来访问元素:
- 元组的特点:
- 元组是一个不可变类型,元组的元素一旦定义下来,则无法改变
- 注意:
- 虽然元组不可变,如果元组
内部元素
是可变类型,那么该元组就可变!!
元组的常见方法:
- index
- count
字典------(dict)
字典(dict)
键值对形式存储的
- 定义:
- d = {“name”: “zhangsan”, “age”: “18”, “gender”: “男”}
- d = dict({“a”:100. “b”: “200”})
- 如何访问值:
- 通过key来访问对应的值
- 字典对象[key] #放回key对应的值
- 常见的方法:
- clear
- copy
- get #获取键相对应的值,如果没有,返回None
- keys #返回所有的键
- values #返回所有的值
- setdefault #返回默认值
- items #返回一个键值对 (我们可以用它来遍历字典)
- pop (key) #通过键来删除我们的键值对
- popitem #移除一个键值对,移除的规则是LIFO(last in first out)后进先出 FIFO先进先出
- 字典的遍历:
-
在python中,所以可以使用for in 迭代元素的对象,都是可迭代的对象(iterable)
内存模型
堆和栈的区别:
栈里面存的是地址,地址指向的是堆中的一片内存
堆才有动态开辟内存