python-ds

谈谈python的基础数据结构?

这个是有时候 被问到的“基础”问题

python的内置类型

python的一个“显著”问题 就是它留給开发者的选择太多。

很多代码 要么就是效率低下 要么就是过于啰嗦。

字符串与字节

python3 只有一种能够保存文本信息的数据类型,就是str

它是不可变的数据类型(序列) 保存的是unicode码位

字节字符串 在python3 当中使用bytes对象来处理

鉴于字符串的不变性 字符串可以作为字典的键或者set的元素,因为一旦初始化之后字符串的值就不会改变。

字符串比较常用的方法 是拼接

集合类型

  • 元组
  • 列表
  • 字典
  • 集合set

通常元组和列表会被对比来看

列表是动态的,其大小可变;
元组是不可变的,一旦创建就不能被修改。

需要考虑一个问题 就使用来说 列表非常广泛?为什么还需要元组!

Cpython的列表根本就不是列表,而是长度可变的数组。

高级一些必备 列表的推导式

枚举enumerate
zip函数

字典 也就是hash

字典推导式和列表推导式具有相同的优点 更加高效、简短、整洁

以前很多返回值不再是列表类型,python3当中返回的是迭代器

Cpython使用伪随机探测的散列表作为字典的底层数据结构。

python3.6重新实现了字典 改变了以前字典是无序的状态

集合

当元素顺序的重要性不如元素的唯一性和测试元素是否包含在集合中的效率时,大部分情况会使用集合

集合有两种;可变的set 不可变的frozenset

集合也具有推导式的写法

更多的扩展数据类型 在collections模块当中

  • 命名元组
  • 双端队列
  • chainmap
  • counter
  • 有序字典
  • 默认字典

类以下当中有哪些高级语法

迭代器和生成器
yield
装饰器
上下文管理器

for…else…
函数注解