python中的数据容器
阅读原文时间:2023年07月08日阅读:3
  • 第六章:Python数据容器

    • 数据容器入门

      • 什么是数据容器

        • 一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素,每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。
      • 根据特点的不同分类数据容器(是否支持重复元素、是否可以修改、是否有序等)

        • 列表(list)

        • 元组(tuple)

        • 字符串(str)

        • 集合(set)

        • 字典(dict)

    • 数据容器:list(列表)

      • 列表的定义

        • 基本语法:

        • 列表内的每一份数据,称之为元素

          • 以[]作为标识

          • 列表内每一个元素之间用,逗号隔开

        • 注意:列表可以一次存储多个数据,且可以为不同的数据类型,支持嵌套

      • 列表的下标索引

        • 列表的每一个元素,都有编号称之为下标索引;从前向后的方向,编号从0开始递增;从后向前的方向,编号从-1开始递减

          • 正向索引

          • 反向索引

          • 嵌套索引

        • 注意下标索引的取值范围,超出范围无法取出元素,并且会报错

      • 列表的常用操作

        • 查找某元素的下标

          • 功能:查找指定元素在列表的下标,如果找不到,报错ValueError

          • 语法:列表.index(元素)

          • index就是列表对象(变量)内置的方法(函数)

        • 列表的修改功能

          • 语法:列表[下标]=值

        • 插入元素

          • 语法:列表.insert(下标,元素),在指定的下标位置,插入指定的元素

        • 追加元素

          • 语法:列表.append(元素),将指定元素,追加到列表的尾部

        • 追加元素2

          • 语法:列表.extend(其他数据容器),将其他数据容器的内容取出,依次追加到列表尾部

        • 删除元素

          • 语法1:del 列表[下标]

          • 语法2:列表.pop(下标),可将删除的元素返回

        • 修改某元素在列表中的第一个匹配项

          • 语法:列表remove(元素)

        • 清空列表内容

          • 语法:列表.clear()

        • 统计某元素在列表内的数量

          • 语法:列表.count(元素)

        • 统计列表内,有多少元素

          • 语法:len(列表)

    • list(列表)的遍历

      • while循环

      • for循环

      • 两者对比

        • 在循环控制上

          • while循环可以自定循环条件,并自行控制

          • for循环不可以自定循环条件,只可以一个个从容器内取出数据

        • 在无限循环上

          • while循环可以通过条件控制做到无限循环

          • for循环理论上不可以,因为被遍历的容器容量不是无限的

        • 在使用场景上

          • while循环适用于任何想要循环的场景

          • for循环适用于,遍历数据容器或简单的固定次数循环场景

    • 数据容器:tuple(元组)

      • 元组的定义

        • 定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。

        • 元组也支持嵌套

        • 注意事项:元组只有一个数据,这个数据后面要加添加逗号,不加逗号的话就变成了字符串类型了

      • 元组的操作

        • index():查找某个数据,如果数据存在返回对应的下标,否则报错

        • count():统计某个数据在当前元组出现的次数

        • len(元组):统计元组内的元素个数

        • 注意事项:元组由于不可修改的特性,所以其操作方法非常少。

          • 不可以修改元组的内容,否则会直接报错

          • 可以修改元组内的list的内容(修改元素、增加、删除、反转等)

          • 不可以替换list为其它list或其它类型

      • 元组的特点

        • 可以容纳多个数据

        • 可以容纳不同类型的数据(混装)

        • 数据是有序存储的(下标索引)

        • 允许重复数据存在

        • 不可以修改(增加或删除元素等)

        • 支持for循环

    • 数据容器:str(字符串)

      • 再识字符串

        • 字符串是字符的容器,一个字符串可以存放任意数量的字符
      • 字符串是无法修改的数据容器

      • 字符串的常见操作

        • 查找特定字符串的下标索引值(起始位置)

          • 语法:字符串.index(字符串)
        • 字符串的替换

          • 语法:字符串.replace(字符串1,字符串2)

          • 功能:将字符串内的全部:字符串1替换为字符串2

          • 注意:不是修改字符串本身,而是得到了一个新字符串

        • 字符串的分割

          • 语法:字符串.split(分隔符字符串)

          • 功能:按照指定的分隔字符串,将字符串划分为多个字符串,并存入列表对象中

          • 注意:字符串本身不变,而是得到了一个列表对象

          • 可以看到,字符串按照给定的 <空格>进行了分割,变成多个子字符串,并存入一个列表对象中。

        • 字符串的规整操作(去前后格)

          • 语法:字符串.strip()
        • 字符串的规整操作(去前后指定字符串)

          • 语法:字符串.strip(字符串)

          • 注意,传入的是“12” 其实就是:”1”和”2”都会移除,是按照单个字符。

        • 统计字符串中某字符串的出现次数

          • 语法:字符串.count(字符串)
        • 统计字符串的长度

          • 语法:len(字符串)
        • 汇总表格

      • 字符串的遍历

        • 类似前面的列表和元组
      • 字符串的特点

        • 只可以存储字符串

        • 长度任意(取决于内存大小)

        • 支持下标索引

        • 允许重复字符串存在

        • 不可以修改(增加或删除元素等)

        • 支持for循环

        • 基本和列表、元组相同;不同与列表和元组的在于:字符串容器可以容纳的数据类型是单一的,只能是字符串类型;不同与列表,相同于元组的在于:字符串不可修改

    • 数据容器(序列)的切片

      • 什么是序列?

        • 序列是指:内容连续、有序,可使用下标索引的一类数据容器

        • 列表、元组、字符串都可以视为序列。

      • 序列的常用操作-切片

        • 序列支持切片,即:列表、元组、字符串,均支持进行切片操作

        • 切片:从一个序列中,取出一个子序列

        • 语法:序列[起始下标:结束下标:步长]

          • 表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:

            • 起始下标表示从何处开始,可以留空,留空视作从头开始

            • 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾

            • 步长表示,依次取元素的间隔

              • 步长1表示,一个个取元素

              • 步长2表示,每次跳过1个元素取

              • 步长N表示,每次跳过N-1个元素取

              • 步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)

              • 注意:此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)

        • 序列的切片演示

    • 数据容器:set(集合)

      • 集合的定义

        • 基本语法:

        • 特点:去重且无序(因为要对元素做去重处理,所以无法保证顺序和创建的时候一致)

        • 对比学习

      • 集合的常用操作

        • 集合的常用操作-修改

          • 添加新元素

            • 语法:集合.add(元素)。将指定元素,添加到集合内

            • 结果:集合本身被修改,添加了新元素

          • 移除元素

            • 语法:集合.remove(元素),将指定元素,从集合内移除

            • 结果:集合本身被修改,移除了元素

          • 从集合中随机取出元素

            • 语法:集合.pop(),功能,从集合中随机取出一个元素

            • 结果:会得到一个元素的结果。同时集合本身被修改,元素被移除

          • 清空集合

            • 语法:集合.clear(),功能,清空集合

            • 结果:集合本身被清空

          • 取出2个集合的差集

            • 语法:集合1.difference(集合2),功能:取出集合1和集合2的差集(集合1有而集合2没有的)

            • 结果:得到一个新集合,集合1和集合2不变

          • 消除2个集合的差集

            • 语法:集合1.difference_update(集合2)

            • 功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素。

            • 结果:集合1被修改,集合2不变

          • 2个集合合并

            • 语法:集合1.union(集合2)

            • 功能:将集合1和集合2组合成新集合

            • 结果:得到新集合,集合1和集合2不变

        • 集合的常用操作 - 集合长度

          • 查看集合的元素数量

            • 语法:len(集合)

            • 功能:统计集合内有多少元素

            • 结果:得到一个整数结果

        • 集合的常用操作 - for循环遍历

          • 要注意:集合不支持下标索引,所以也就不支持使用while循环。
        • 集合常用功能总结

      • 集合的特点

        • 可以容纳多个数据

        • 可以容纳不同类型的数据

        • 数据是无序存储的(不支持下标索引)

        • 不允许重复数据存在

        • 可以修改(增加或删除元素等)

        • 支持for循环

    • 数据容器:dict(字典、映射)

      • 字典的定义

        • 字典的定义,同样使用{},不过存储的元素是一个个的:键值对

          • 使用{}存储元素,每一个元素都是一个键值对

          • 每一个键值对包含key和value(用冒号分隔)

          • 键值对之间使用逗号分隔

          • Key和Value可以是任意类型的数据(Key不可为字典)

          • Key不可重复,重复会对原有数据覆盖

        • 语法格式:

        • 字典数据的获取

          • 字典同集合一样,不可以使用下标索引但是字典可以通过Key值来取得对应的Value

        • 字典的嵌套

          • 字典的Key和Value可以是任意数据类型(Key不可为字典),字典是可以嵌套的

        • 嵌套字典的内容获取

        • 字典的注意事项

          • 键值对Key和Value可以是任意类型(Key不可为字典)

          • 字典内的Key不允许重复,重复添加等同于覆盖原有数据

          • 字典不可用下标索引,而是通过Key检索Value

      • 字典的常用操作

        • 新增元素

          • 语法:字典[Key] = Value,结果:字典被修改,新增了元素

        • 更新元素

          • 语法:字典[Key] = Value,结果:字典被修改,元素被更新

          • 注意:字典Key不可以重复,所以对已存在的Key执行上述操作,就是更新Value值

        • 删除元素

          • 语法:字典.pop(Key),结果:获得指定Key的Value,同时字典被修改,指定Key的数据被删除

        • 清空字典

          • 语法:字典.clear(),结果:字典被修改,元素被清空

        • 获取全部的key

          • 语法:字典.keys(),结果:得到字典中的全部Key

        • 遍历字典

          • 语法:for key in 字典.keys()

          • 运行结果

        • 计算字典内的全部元素(键值对)数量

          • 语法:len(字典)

          • 结果:得到一个整数,表示字典内元素(键值对)的数量

        • 字典常用操作总结

        • 字典的特点

          • 可以容纳多个数据

          • 可以容纳不同类型的数据

          • 每一根数据是KeyValue键值对

          • 可以通过Key获取到Value,Key不可重复(重复会覆盖)

          • 不支持下标索引

          • 可以修改(增加或删除更新元素等)

          • 支持for循环,不支持while循环

    • 扩展:数据容器对比总结

    • 数据容器的通用操作

      • 数据容器的通用操作 - 遍历

        • 5类数据容器都支持for循环遍历

        • 列表、元组、字符串支持while循环,集合、字典不支持(无法下标索引)

      • 数据容器的通用统计功能

        • len(容器):统计容器的元素个数

        • max(容器):统计容器的最大元素

        • min(容器):统计容器的最小元素

      • 容器的通用转换功能

      • 容器通用排序功能

        • sorted(容器, [reverse=True]):将给定容器进行排序

        • 注意,排序后都会得到list(列表)对象

      • 容器通用功能总览

    • 扩展:字符串的大小比较

      • 字符串进行比较就是基于数字的码值(ASCII)大小进行比较的。

        • ASCII码表
      • 字符串是按位比较,也就是一位位进行对比,只要有一位大,那么整体就大。