Python数据结构内建函数

数据结构

集set

  • 可变的、无序的、不重复的元素的集合
  • set() → new empty set object
  • set(iterable) → new set object
  • set的元素必须可以hash
  • 元素不可迭代,set可迭代

set和线性结构

  • 线性结构时间复杂度为O(n)
  • set、dict等结构,内部使用hash值作为key,时间复杂度为O(1)
  • 可hash(不可变类型)
  • set的元素必须可hash

字典dict

  • d = dict()d = {}
  • key-value键值对的数据的集合
  • 可变的、无序的、key不重复
  • dicr(**kwargs) # name = value
    • *args:(可以理解为只有一列的表格,长度不固定)将实参中按照位置传值,多出来的值都给args,且以元组的方式呈现
    • **kwargs:(可以理解为字典,长度不固定)将形参中按照关键字把多余的传值以字典的方式呈现
  • 顺序必须是位置参数*args**kwargs,否则报错
  • 顺序必须是位置参数默认参数**kwargs,否则报错

    • 例:
      a = dict([('c', 100), ['d',200]], a = 1, b = 2)
      a = {'a' = 1, 'b' = 2, 1:'abc'}
  • dict(iterable,**kwarg) # 可迭代对象和name = value构造,可迭代对象的元素须是二元结构

  • dict(mapping,**kwarg) # 字典构造另一个字典
  • d = {'a':10,'b':20,'c':None,'d'"[1,2,3]}

字典的key

  • key的要求和set的元素要求一致
    • set的元素可看作是key,set可看作是dict的简化版
    • key必须可hash,可用hash()测试

defaultdict

  • dict = defaultdict(factory_fuction)
    • factory_fuction可以是list、set、str…作用是当key不存在时,返回工厂函数生成key对应的value的缺省值,如list对应[]str对应空字符串''set对应set()int对应0

OrderedDict

  • collection.OrderedDict([items])
  • key并不是按照加入的顺序排列,可用OrderedDict记录顺序
  • from collection import OrderedDict
  • 有序字典可记录元素插入的顺序,打印时也按照此顺序打印

例题

这里写图片描述

这里写图片描述

这里写图片描述

解析式 & 生成器

列表解析式List Comprehension

  • 构造返回新列表
  • 语法
    • [返回值 for 元素 in 可迭代对象 if条件]
  • 使用中括号[],内部是for循环,if条件语句可选
    • [exp for i in iterable1 for j in iterable2]

等价于

lst = []
    for i in iterable1:
        for j in iterable2:
            lst.append(exp)

例题

这里写图片描述

这里写图片描述

这里写图片描述

选择排序

  • 简单选择排序
    • 两两比较大小,找出极值放置在固定的某一端
    • 排序结果分升序、降序
  • 降序
    • n个数从左至右,索引从0到n-1,两两比较,记录大值的索引,比较此轮所有数
    • 将大值和索引0数交换,若大值就是索引1则不交换
    • 第二轮从1开始比较找到最大值,将其与索引1交换,若其在索引1位置则不交换
    • 以此类推,每次左侧都会固定一个大值
  • 升序
    • 与降序相反
  • 无法得知当前轮是否已经完成排序,但可知极值是否在目标索引位置上
  • 遍历次数n(n-1)/2
  • 时间复杂度O(n²)
  • 减少交换次数提高效率,性能略高于冒泡法

例题

这里写图片描述

这里写图片描述

内建函数

类型

  • 标识 id
    • 返回对象的唯一标识,CPython返回内存地址
  • 哈希 hash()
    • 返回一个对象的哈希值
  • 类型 type()
    • 返回对象的类型
  • 类型转换
    • float() int() bin() hex() oct() bool() list() tuple() dict() set() complex() bytes() bytearray()
  • 输入 input([prompt])
    • 接收输入,返回一个字符串
  • 打印 print(*object,sep='',end='\n',file=sys.stdout,flush=False)
    • 打印输出,默认使用空格分隔、换行结尾。输出至控制台
  • 长度len(s)
    • 返回一个集合类型的元素个数
  • isinstance(obj,class_or_tuple)
    • 判断obj是否属于某种类型或元组中列出的某个类型
  • issubclass(cls,class_or_tuple)
    • 判断类型cls是否是某种类型的子类或元组中列出的某个类型的子类
  • abs() # 绝对值
  • max()min() # 极值
  • round()
    • "四舍六入五取偶"
  • pow(x,y) == x ** y
  • range(start,stop[,step])
    • [起始位置,结束位置),步长
  • divmod(x,y) == tuple(x//y,x%y)
  • sum(iterable[,start])
    • 对可迭代对象的所有数值元素求和
  • chr(i)
    • 给一个一定范围的整数返回对应的字符
  • ord(c)
    • 返回字符对应的整数
  • sorted(iterable[,key][,reverse])
    • 返回新列表,默认升序排序
    • reverse为反转
  • reversed(seq)
    • 返回一个反转元素的迭代器
  • enumerate(seq,start=0) # 枚举
    • 迭代一个序列,返回索引数字和元素构成的二元组
    • start表示起始索引,默认为0
  • iter(iterable)next(iterator[,default]) # 迭代器和取元素
    • iter将可迭代对象封装成迭代器
    • next对迭代器取下一个元素,不可逆序。若全部取过,再次next则返回StopIteration异常
  • zip(*iterables) # 拉链函数
    • 将多个可迭代对象合并,返回一个迭代器
    • 将每次从不同对象中取到的元素合并成一个元组

可迭代对象

  • 可以通过迭代一次次返回不同元素的对象
    • 相同与否指元素在容器中是否为同一个。# ['a','a']虽然值相同,但是元素不同
  • 可以迭代,未必有序,未必可索引
  • 容器:元素的集合,可被迭代:listtuplestringbytesbytearrayrangesetdict生成器...
  • 成员操作符:innot in # in实质是遍历

迭代器

  • 必须是可迭代对象
  • 通过iter方法将一个可迭代对象封装成迭代器
  • 通过next方法迭代迭代器对象
  • 生成器对象就是迭代器对象,生成器是一种特殊的迭代器

猜你喜欢

转载自blog.csdn.net/DumbEquALsI/article/details/81783395
今日推荐