python常用数据结构

列表 list

  • 定义:有序的可变元素的集合,使用中括号包围,元素之间用逗号分隔
  • 特点:列表是动态的,列表是异构的,允许出现重复元素
  • 创建:构造函数list()、中括号填充、列表推倒式 li=[i for i in range(1, 10)]
  • 索引:正向索引,从 0 开始,支持反向索引,编号从-1 开始
  • 切片:[start: stop: step],左闭右开
  • 运算符:重复*,合并+
  • 成员检测:in,not in
  • 列表方法:
    – append(item):将item添加到列表的末尾
    – extend(iterable):将一个可迭代对象的所有元素,添加到列表末尾
    – insert(index, item):将一个对象插入到指定的索引位置,原索引位置及后面的元素后移一位
    – pop(index) 或 pop():弹出并返回所指定索引的元素,未指定索引则返回末尾元素, 如果索引值不正确或列表为空,则引发 IndexError 错误
    – remove(item):移除列表中第一个等于 item 的元素, 如目标元素不存在,会报 ValueError
    – sort(key=None, reverse=False):对列表进行原地排序,默认升序
    – reverse():将列表中的元素顺序反转
  • 嵌套列表:在列表里存放列表
  • 列表推导式:指循环创建列表,[x for x in li if x 条件]

元祖 tuple

  • 定义:元组是有序的不可变对象集合,使用小括号包围,元素之间用逗号分隔
  • 特点:是异构的,可以包含多种数据类型
  • 创建: 直接逗号分隔、通过小括号填充元素、通过构造方法 tuple(iterable)
  • 注意:单元素元祖,末尾逗号不能省
  • 索引:正向索引,从 0 开始,支持反向索引,编号从-1 开始
  • 切片: [start: stop: step],左闭右开,[::-1]反转
  • 常用方法:
    – index(item),返回与目标元素相匹配的首个元素的索引, 目标不存在,会报错
    – count(item) :返回某个元素出现的次数
  • 元组解包:把一个可迭代对象里的元素,一并赋值到由对应的变量组成的元组中,要求元素个数是相同的

元组与列表

  • 相同点
    – 都是有序的
    – 都是异构的,能够包含不同类型的对象
    – 都支持索引和切片
  • 区别
    – 声明方式不同,元组使用(),列表使用 []
    – 列表是可变的,元组是不可变的

集合 set

  • 定义:无序的唯一对象集合,用大括号{}包围,对象相互之间使用逗号分隔(消除重复元素)
  • 特点:动态的,可以随时添加或删除元素,异构的,可以包含不同类型的数据
  • 创建:使用{}填充元素、构造方法 set()、集合推导式
  • 成员检测:in、not in
  • 常用方法:
    – add(item):将单个对象添加到集合中
    – update(iterable): 批量添加来自可迭代对象中的所有元素
    – remove(item):从集合中移除指定元素 item,item 不存在引发 KeyError
    – discard(item):从集合中移除指定对象 item,item不存在没影响
    – pop():随机从集合中移除并返回一个元素,集合为空会引发 KeyError
    – clear():清空集合,移除所有元素
  • 集合运算:
    – 交集运算:intersection(),操作符:&
    – 并集运算:union(),操作符:|
    – 差集运算:difference(),操作符: -
  • 集合推导式:{x for x in … if …}

字典 dict

  • 定义:无序的键值对集合,用大括号{}包围,每个键/值对之间用一个逗号分隔,各个键与值之间用一个冒号分隔
  • 特点:字典是动态的
  • 创建: 大括号填充键值对、构造方法 dict()、字典推导式
  • 访问元素:中括号[key]、使用键来访问其关联的值、访问时对应的 key 必须要存在
  • 操作元素:dict[key] = value,键不存在则添加,存在则修改, 字典的值可以是字典对象
  • 常用方法:
    – keys():返回字典键组成的一个新视图对象
    – values():返回由字典值组成的一个新视图对象
    – items():返回由字典项 ((键, 值) 对) 组成的一个新视图对象
    – get(key):获取指定 key 关联的 value 值,如key不存在,则返回 None
    – update(dict):使用来自 dict 的键/值对更新字典,覆盖原有的键和值
    – pop(key):删除指定 key 的键值对,并返回对应 value 值,如key 不存在,则会引发 KeyError
  • 字典推导式:可以从任何以键值对作为元素的可迭代对象中构建出字典, {k : v for k,v in … if …}