python内置数据结构

分类

  • 数值型
     int、float、complex、bool
  • 序列对象
     字符串 str
     列表 list
     tuple
  • 键值对
     集合set
     字典dict
    数值型
  • 数值型
     int、float、complex、bool都是class,1、5.0、2+3j都是对象即实例
     int:python3的int就是长整型,且没有大小限制,受限于内存区域的大小
     float:由整数部分和小数部分组成。支持十进制和科学计数法表示。C的双精度型实现
     complex:有实数和虚数部分组成,实数和虚数部分都是浮点数,3+4.2J
     bool:int的子类,仅有2个实例True、False对应1和0,可以和整数直接运算
  • 类型转换(built-in)
     int(x) 返回一个整数
     float(x) 返回一个浮点数
     complex(x)、complex(x,y) 返回一个复数
     bool(x) 返回布尔值,前面讲过False等价的对象
    数字的处理函数
     round(),四舍六入五取偶
     floor()向下取整、ceil()向上取整
     int() 取整数部分
     // 整除且向下取整
     min()
     max()
     pow(x,y) 等于 x**y
     math.sqrt()
  • 进制函数,返回值是字符串
     bin()
     oct()
     hex()
     math.pi π
     math.e 自如常数
    类型判断
     type(obj) ,返回类型,而不是字符串
     isinstance(obj, class_or_tuple),返回布尔值
  • 举例:
    type(a)
    type(‘abc’)
    type(123)
    isinstance(6, str)
    isinstance(6, (str, bool, int))
    列表list
     一个队列,一个排列整齐的队伍
     列表内的个体称作元素,由若干元素组成列表
     元素可以是任意对象(数字、字符串、对象、列表等)
     列表内元素有顺序,可以使用索引
     线性的数据结构
     使用 [ ] 表示
     列表是可变
    列表索引访问
     索引,也叫下标
     正索引:从左至右,从0开始,为列表中每一个元素编号
     负索引:从右至左,从-1开始
     正负索引不可以超界,否则引发异常IndexError
     为了理解方便,可以认为列表是从左至右排列的,左边是头部,右边是尾部,左边是下界,右边是
    上界
     列表通过索引访问
     list[index] ,index就是索引,使用中括号访问
    列表查询
     index(value,[start,[stop]])
     通过值value,从指定区间查找列表内的元素是否匹配
     匹配第一个就立即返回索引
     匹配不到,抛出异常ValueError
     count(value)
     返回列表中匹配value的次数
     时间复杂度
     index和count方法都是O(n)
     随着列表数据规模的增大,而效率下降
     如何返回列表元素的个数?如何遍历?如何设计高效?
     len()
    列表元素修改
     索引访问修改
     list[index] = value
     索引不要超界
    列表增加、插入元素
    append(object) -> None
     列表尾部追加元素,返回None
     返回None就意味着没有新的列表产生,就地修改
     时间复杂度是O(1)
     insert(index, object) -> None
     在指定的索引index处插入元素object
     返回None就意味着没有新的列表产生,就地修改
     时间复杂度是O(n)
     索引能超上下界吗?
     超越上界,尾部追加
     超越下界,头部追加
    列表删除元素
     remove(value) -> None
     从左至右查找第一个匹配value的值,移除该元素,返回None
     就地修改
     效率?
     pop([index]) -> item
     不指定索引index,就从列表尾部弹出一个元素
     指定索引index,就从索引处弹出一个元素,索引超界抛出IndexError错误
     效率?指定索引的的时间复杂度?不指定索引呢?
     clear() -> None
     清除列表所有元素,剩下一个空列表
    bytes、bytearray
     Python3引入两个新类型
     bytes
     **不可变**字节序列
     bytearray
     字节数组
    可变
    bytes、bytearray
  • 字符串与bytes
     字符串是字符组成的有序序列,字符可以使用编码来理解
     bytes是字节组成的有序的不可变序列
     bytearray是字节组成的有序的可变序列
  • 编码与解码
     字符串按照不同的字符集编码encode返回字节序列bytes
     encode(encoding=‘utf-8’, errors=‘strict’) -> bytes
     字节序列按照不同的字符集解码decode返回字符串
     bytes.decode(encoding=“utf-8”, errors=“strict”) -> str
     bytearray.decode(encoding=“utf-8”, errors=“strict”) -> str
    python内置数据结构
    bytes定义
  • 定义
     bytes() 空bytes
     bytes(int) 指定字节的bytes,被0填充
     bytes(iterable_of_ints) -> bytes [0,255]的int组成的可迭代对象
     bytes(string, encoding[, errors]) -> bytes 等价于string.encode()
     bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制出
    一个新的不可变的bytes对象
  • 使用b前缀定义
     只允许基本ASCII使用字符形式b’abc9’
     使用16进制表示b"\x41\x61"