容器
字符串
- 回顾字符串的定义方式
- 了解转义字符
- 字符串相关的运算
- 字符串相关函数
- 字符串格式化的方法
详解字符串-转义字符
字符串的定义方式
- 单引号’’
- 双引号定义字符串””
- 三引号定义字符串’’’’’’或者””””””
- 字符串定义时,引号可以互相嵌套
转义字符
一个普通的字符出现在转义符\后面时候,实现了另一种意义
- \ 转义符,续行符。
- 作为转义符时,在\后面出现的字符可能会实现另外一种意义
- 作为续行符时,在行尾使用了\后,可以继续换行书写内容
- \n 代表换行
- \r \r 代表光标的位置,从\r 出现的位置作为光标的起点
- \t 水平制表符
- \b 退格符
- \ 就是打出一个单独的\
- r 在字符串前+ r 可以取消转义符的效果,原文字输出
1 | # \ 作为续行符 |
字符串相关操作
- 字符串 +操作: 加法在字符串之间起到拼接作用
- 字符串 *操作:乘法与字符串使用,会重复指定倍数的字符串
- 字符串 []切片操作:只能使用[]下标的方式访问,但是不能修改
1 | # 加法在字符串之间起到拼接作用 |
字符串格式化
format() 格式化字符串 f 方法
1 | # 普通方式 |
英文字符与字符检测相关函数
- 大小写转换
- str.capitalize() 返回原字符串的副本,首个字符大写,其余为小写
- str.title() 返回原字符串的副本,每一个英文单词的首个字符大写,其余为小写
- str.upper() 将字符串中的英文全部转化为大写
- str.lower() 将字符串中的英文全部转化为小写
- str.swapcase() 将字符串中的英文大小写互换
- 字符检测
- str.isupper() 检查字符串是否都是大写
- str.islower() 检查字符串是否都是小写
- str.istitle() 检查字符串是否符合 title
- str.isalnum() 检测当前字符串是否由字符(中文、英文、数字)组成。
- str.isalpha() 检测当前字符串是否由字符(中文、英文)组成,不包含数字。
- str.isdigit() 检测当前字符串是否纯数字
- str.isspace() 检测当前字符串是否纯空格
- str.startswith() 检测当前字符串是否由指定字符开头,可以指定开始和结束的位置
- str.endswith() 检测当前字符串是否由指定字符结尾,可以指定开始和结束的位置
1 | # 大小写转换 |
字符串查找相关函数
- str.find(sub[,start[,end]]) 从左向右获取指定字符在字符串中的索引位置,未找到则返回-1
- str.rfind(sub[,start[,end]]) 从右向左获取指定字符在字符串中的索引位置,未找到则返回-1
- str.index() 和 find 方法一样,只不过如果没有找到则报错
- str.rindex() 从右往左找,如果没有找到则报错
- str.count() 计算一个字符串出现的次数
1 | sen = "duanduanispig,littlepig" |
字符串操作相关函数
- str.split() 按照指定的字符进行分隔,把一个字符串分隔成一个列表,可以指定分隔的次数
- str.rsplit() 按照指定的字符进行分隔,把一个字符串分隔成一个列表,同样可以指定分割的次数
- str.join() 按照指定的字符 str,把容器类型中的数据连接成一个字符串
- str.strip() 去除字符串左右两侧的指定字符
- str.lstrip() 去除字符串左侧的指定字符
- str.rstrip() 去除字符串右侧的指定字符
- str.replace(new,old) 用 new 替换掉 str 中的 old,可以指定替换的次数
- str.center() 给 str 的左右增加指定字符
- str.ljust() 字符串按照指定位数向左对齐,右侧不够的补充指定字符
- str.rjust() 同上,向右对齐
1 | sen = "duanduanisalittlepig" |
列表详解
列表就是一组有序的数据组合,列表中的数据可以被修改
列表定义与基本操作
列表的定义
- 可以使用中括号定义 []
- 可以使用 list 函数定义
- 在定义列表中的元素时,需要在每个元素之间使用逗号,进行分割。
- 列表中的元素可以是任意类型,通常存放同类型的
列表的基本操作
- 使用+可以对两个列表进行拼接
- 使用*实现列表元素的重复
- 使用 in 判断列表中是否存在某元素
- 列表的索引操作
- 通过下标获取指定的元素
- 通过下标修改元素
- 不能通过下标添加元素
- append():可以用于向列表中追加元素
- len():获取列表的长度
- 列表元素的删除
- del 可以用于通过指定下标删除元素
- pop():可以使用 pop 方法出栈来删除最后一个元素
1 | varlist1 = [1, 2, 3, 4] |
列表切片操作
列表[开始索引:结束索引:步进值]
- 列表[开始索引:] 从开始索引到列表的最后
- 列表[:结束索引] 从开始到结束索引的前一个
- 列表[开始索引:结束索引] 从开始索引到结束索引的前一个
- 列表[开始索引:结束索引:步进值] 带有步进值的从开始到结束前一个
- 列表[:] 列表全部数据
- 列表[::] 列表全部数据
- 列表[::-1] 列表逆序输出
使用切片的方法进行列表的数据更新和删除
- 从指定下标开始到指定下标结束前,替换为想要的对应的容器类型
- 使用 del 进行切片删除
1 | varlist = ['Kobe', 'James', 'Curry', 'Tony', 'Irving', 'Thompson', 'Harden'] |
列表的相关函数
- len() :使用 len 方法可以计算出列表的长度
- count() :count 方法可以检测具体某个元素出现了多少次
- append() :append 方法可以在列表尾部追加元素
- insert(i,x) :在 i 索引位置,插入 x
- pop() :默认出栈一个最末尾的元素,也可以指定索引进行出栈
- remove() :可以指定列表中的元素进行删除,如果元素不存在会报错
- index() :可以查找列表中元素第一次出现的索引
- extend() :可以将另一个列表扩展到原来的列表上,类似于+
- clear() :清空列表中的元素
- reverse() :逆序列表
- sort() :对列表排序,默认由小到大排序
- 若 reverse=True,则按照由大到小排序
- 若 key=func,则按照函数处理结果进行排序
- copy() :可以拷贝一个列表,但是如果执行修改操作,del 会对多维列表同时修改
1 | varlist = ['Kobe', 'James', 'Curry', 'Tony', 'Irving', 'Thompson', 'Harden'] |
深拷贝与浅拷贝
- 浅拷贝
- 使用的是 copy()方法
- 对一维列表拷贝后,与原来的列表是不同的,单独做出修改不会影响另一列表
- 但是如果是多维列表,使用浅拷贝之后,对多维部分进行修改,所有的都会改变
- 深拷贝
- 使用的是 copy 模块下的 deepcopy()
- 深拷贝下的拷贝列表,是完全独立的
1 | import copy |
列表推导式
列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或者可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创造子序列
- 常用方法
- list = [想要的处理方式 for i in 容器类型数据 条件表达式]
1 | # 创建0-9的平方列表 |
练习题
使用列表推导式实现乘法表
1 | # 把字典中的键值对转换成 a=b的列表形式 |
元组详解
基本定义和切片操作
元组和列表一样都是一组有序的数据组合 元组中的元素一旦定义了就不能修改,因此元组是不可变数据类型
元组定义
- 定义空元祖,变量名=() 或者 变量名=tuple()
- 还可以使用 变量名=(1,2,3)的方式定义有数据的元组
- 如果只有一个数据,数据后需要加,,如 变量名=(1,)
- 特例,使用 变量=1,2,3 这样的方式也可以定义元组
元组的相关操作
由于元组是不可变的数据类型,因此只能使用索引进行访问,不能进行其他操作 元组可以和列表一样使用切片操作
- tuple.count() 统计一个元素出现的次数
- tuple.index() 查找一个元素的索引值
- tuple[] 与列表一样的方式进行切片
- 使用 +、* 运算,合并组成新的元组
- in 方法检测一个元素是否在元组中
1 | vartuple = 1, 2, 3 |
元组推导式 generator
元组推导式 generator 也称为生成器,返回的是一个生成器 生成器是一个特殊的迭代器,生成器可以自定义,也可以使用元组推导式定义 生成器是按照某种算法去推算下一个数据或结果,只需要往内存中存储一个生成器,节约内存消耗,提升性能 语法: (1) 里面是推导式,外面是一个() 的结果就是一个生成器 (2) 自定义生成器,含有 yidle 关键字的函数就是生成器 含有 yield 关键字的函数,返回的结果就是一个迭代器(生成器函数就是一个返回迭代器的函数)
- 如何使用生成器:生成器是迭代器的一种,所以可以使用操作迭代器的方法操作生成器
- 使用 next()函数调用
- 使用 list()函数或者 tuple()函数进行操作
- 使用 for 语句进行遍历
1 | varlist = [1, 2, 3, 4, 5] |
字典详解
定义和基本操作
字典也是一种数据的集合,由键值对组成的数据集合,字典中的键不能重复 字典中的键必须是不可变的数据类型,常用的键主要是:字符串,整型
字典的定义
- 字典可以通过大括号括起来的 键:值对 进行创建
- 也可以使用 dict 构造器来创建
- 数据类型的转换:可以将其他的二级容器类型(列表、元组)转换为 dict
- 可以使用 zip()函数,将两个 list 组合成一个 dict
字典的操作
- 获取,通过索引键的方式可以获取到值
- 修改,索引到的话可以修改值
- 删除,使用 del 进行删除
- 添加,使用一个新的键,进行赋值,若键存在,则会覆盖
- 成员检测,可以使用 in 进行成员检测,但是只能检测键
- 长度,可以用 len(),来检测有多少个键值对
- dict.keys():可以查询所有键
- dict.values():可以查询所有值
- dict.items():获取当前字典中所有的键值对
- 字典的遍历:可以使用 for
- 字典合并:new_dict = {**dict1, **dict2}
1 | vardict = {'a': 1, 'b': 2, 'c': 3} |
相关函数
- len(dict),来检测有多少个键值对
- dict.keys():可以查询所有键
- dict.values():可以查询所有值
- dict.items():获取当前字典中所有的键值对
- iter(dict):返回以字典的键为元素的迭代器
- pop(key):通过键的方式弹出键值对
- popitem():按照 LIFO 的方式删除键值对
- get():通过 get 函数获得对应键的值,若键不存在返回 None
- update():更新字典,在原来的基础上更新
- setdefault():如果 字典的键存在 则返回对应值;如果键不存在,默认存入值为 None 的键值对,返回值为值,也可以指定传入的值
1 | vardict = {'a': 1, 'b': 2, 'c': 3} |
字典推导式
1 | vardict = {'a': 1, 'b': 2, 'c': 3} |
集合详解
集合的基本操作和常规
确定的一组无序的数据的组合
- 确定的:当前集合中元素的值不能重复
- 由多个数据组合的复合型数据(容器类型数据)
- 集合中的数据没有顺序
- 功能:成员检测、从序列中去除重复项以及数学中的集合类计算,列如交集、并集、差集与对称差集等等
集合的定义
- 可以直接使用{}来定义集合,定义空集合必须用 set()方法
- 可以使用 set()进行集合的定义和转换
- 使用集合推导式完成集合的定义 注意:集合中的元素不能重复,集合中存放的数据:Number、Strings、Tuple、冰冻集合
集合的基本操作和常规函数
- 无序、False 和 0 只会出现一个、True 和 1 只会出现一个、元素值不会重复
- 成员检测:使用 in 检测是都存在某个元素
- 元素个数:len()检测集合元素个数
- 集合遍历:使用 for 方法进行遍历
- 追加元素:set.add()可以向集合中追加元素,(为什么不是 append,因为 append 有扩充的思想,从尾部插入,而 add 是没有顺序的)
- 删除元素:
- set.pop()可以删除集合中的元素,随机删除,并返回
- set.remove()指定删除集合中的元素,无返回值,如果不存在则会报错
- set.discard()指定删除集合中的元素,不存在也不会报错
- 清空集合:set.clear()
- 更新集合:set.update()
- 集合的拷贝:set.copy()
- 冰冻集合:frozenset()
1 | varset = {123, 'abc', True, (1, 2, 3), 0, False, 3.1415, 123} |
冰冻集合
- 定义冰冻集合 只能使用 frozenset()函数进行冰冻集合的定义
- 冰冻集合一旦定义 就不能修改
- 冰冻集合只能做集合相关的运算:求并交补差集
- 本身就是一个强制类型转换的函数,可以把其他任何容器类型的数据转换为冰冻集合
- 冰冻集合可以遍历:使用 for 进行遍历
- 冰冻集合的推导式
1 | vars = frozenset({1,2,3}) |
集合推导式
1 | # 普通推导式 |
集合运算
- 集合的主要运算
- 交集
- &
- set.intersection() 有返回值,不对原集合更新;还可以对可迭代对象进行合并
- set.intersection_update() 无返回值,对原集合会更新
- 并集
- | 更推荐这种,对两种数据要求高 不能太灵活
- set.union() 有返回值,不对原集合更新 ;还可以对可迭代对象进行合并
- set.update() 无返回值,对调用的集合更新
- 差集 (去掉集合中 另一集合有的部分)
- set.difference() 有返回值,不对原集合更新
- set.difference_update() 无返回值,对原集合更新
- 对称差集 (去掉各自集合中 相同的部分)
- ^
- set.symmetric_difference() 有返回值,不对原集合更新
- set.symmetric_difference_update() 无返回值,对原集合更新
- 交集
- 检测超集和子集
- set1.issuperset(set2) 返回值为 True、False,意义为 set1 是否为 set2 的超集,也可以用
>= - set1.issubset(set2) 检测 set1 是否为 set2 的子集,也可以使用
<=
- set1.issuperset(set2) 返回值为 True、False,意义为 set1 是否为 set2 的超集,也可以用
- 检测是否不相交
- set1.isdisjoint(set2) 有返回值,不相交返回 True、相交返回 False
1 | vars1 = {1, 2, 3, 4, 5, 6, 7} |
更新: 2024-01-10 22:17:18
原文: https://www.yuque.com/zacharyblock/cx2om6/an7fvuvt1unusq1w