Skip to content

Latest commit

 

History

History
224 lines (150 loc) · 6.24 KB

167-233828-可迭代_iterable_对象_集合_set_排序_sorted.sy.md

File metadata and controls

224 lines (150 loc) · 6.24 KB
show version enable_checker
step
1.0
true

可迭代 iterable 对象

回忆

  • 这次主要了解的是 for 循环语句
  • for 循环可以遍历
    • range 对象
    • list 列表对象
    • tuple 元组对象
    • 只要是 iterable 的对象就可以
  • 如果我要求列表不能重复插入可以么?🤔

编程

  • 直接的想法是靠 if 判断
  • 如果插入的元素 in 列表 list 就不插入
  • 如果 not in 就插入

图片描述

  • 当然也能用别的容器来实现
  • 回忆一下,哪个容器要求不可重复

set 集合

图片描述

  • 集合元素是可以去除重复的
  • 集合元素是可迭代的么?

集合元素

图片描述

图片描述

  • 集合元素是可迭代的
  • 我们试试用 for 语言遍历集合
  • 在循环体中改变集合

图片描述

  • 集合元素是不可重复的
  • 所以并不能改变
  • 试试插一个不在集合中的元素

尝试

图片描述

  • 他报了一个运行时错误
  • Runtime Error
  • 循环体中改变了集合的大小
  • 为什么列表元组可以在循环体中改变
  • 而集合不可以呢?

集合的特性

  • 集合的无序性

图片描述

  • 因为他没有个顺序
  • 所以增加元素之后不确定元素的顺序
  • 所以最好在循环体中不改变集合
  • 列表其实也面临同样问题
  • 如果遍历的过程中对于列表 append 在结尾处增加元素还好
  • 如果 insert,在开头处插入元素会如何呢?

列表 insert

图片描述

  • 插在开头处
  • 或者说插在游标前面
  • 就会出现这样的问题
  • 在循环体中动可迭代对象这个事情要特别小心
  • 其实列表、元组、集合可以从有序性和可变性来划分出来

四个象限

图片描述

  • 这个四个象限分别是什么类的对象?
  • 自己想一想

转化

图片描述

  • 列表可以转化为集合

图片描述

  • 集合可以转化为列表
  • 列表是有序的,但如果我想让他按照大小排序呢?

排序

图片描述

  • 可以用列表类的 sort 方法进行排序
  • 但是如果我想要的是逆序呢?
  • 从大到小

逆序

图片描述

  • 可以调用列表类的 reverse 方法
  • 这样就从大到小了
  • 可是这也改变了列表本身的次序
  • 我希望能够不改变列表本身的次序
  • 可能么?

sorted 方法

图片描述

  • sorted 方法不会改变列表 l 本身的次序
  • 只是返回一个排好序的新列表
  • 这怎么理解呢?

sorted 细节

图片描述

图片描述

  • sorted 还可以加上 key
  • key 这个参数是什么意思?

key

图片描述

  • 小写后的字符串大小排序

图片描述

  • 根据字符串长度排序
  • 如果列表项是一个容器呢?

选择排序依据

图片描述

  • 按第一项排序和按第二项排序
  • 结果完全不同
  • 如果列表项是字典呢?

按照 key 来排序

图片描述

  • 其实和列表、元组一样
  • 只不过列表元组索引的是数字
  • 字典里索引的是字符串

图片描述

  • 那我们可以返回一个逆序的新列表么?

reversed 方法

图片描述

  • reverse 看起来返回一个迭代器 iterator
  • 我们要的是排好逆序
    • 第一步排序
    • 第二部逆向
    • 第三部转化为列表
  • 这些都不会影响列表 l 本身的排序
  • 我们来看看帮助

reversed 细节

图片描述

  • reversed 是一个类
  • 返回一个可迭代的对象
  • 这个可迭代的对象可以被转化为列表
  • 我们可以再分一下象限

比较

sort reverse sorted reversed
所属 列表成员函数 列表成员函数 内建函数 内建的类
是否会影响原列表 不会 不会
返回类型 None None 新列表 新可迭代类对象
排序方式 正序 逆序 正序 逆序
  • 正序和逆序都属于排序
  • 其实最好用的还是 sorted
  • 因为 sorted 可以有一个 reverse 的参数
  • 此外还有个乱序

乱序

图片描述

图片描述

总结

  • 这次用 for 遍历了 set 集合
  • set 集合的特点
    • 不可重复
    • 无序的
  • list 是有序的,可以
    • 排序
    • 逆序
    • 乱序
  • 那为什么他们还可以相互转化呢?
    • 因为他们都是 iterable 的对象
  • 还有什么是可迭代 iterable 的对象呢?🤔
  • 下次再说 👋