第一节 字符串
一、引号和转义字符
1.引号
单行字符串可以由一对单引号(')或双引号(")作为边界来表示,单引号和双引号作用相同。当使用单引号时,双引号可以作为字符串的一部分;当使用双引号时,单引号可以作为字符串的一部分。
多行字符串可以由一对三单引号(’’’)或三双引号(""")作为边界来表示,两者作用相同。
双引号和单引号中代码内容,可以使用回车换行输入,新产生的行会自动加上双引号或单引号,但是输出结果并不换行。
2.转义字符
反斜杠字符(\)是一个特殊字符,在Python字符串中表示“转义”,即该字符与后面相邻的一个字符共同组成了新的含义。例如:\n表示换行、\\表示反斜杠、\'表示单引号、\"表示双引号、\t表示制表符(Tab)。
反斜杠字符(\)还有一个额外作用:续行。
二、字符串的索引和切片
1.索引
对字符串中某个字符的检索被称为索引。
索引的使用方式如下:<字符串或字符串变量[序号]
字符串包括两种序号体系:正向递增序号和反向递减序号,如图2.2所示。
作为字符序列,字符串可以对其中单个字符或字符片段进行索引。字符串包括两种序号体系:正向递增序号和反向递减序号,如图2.2所示。
2.切片
(1)基本切片方法
对字符串中某个子串或区间的检索称为切片。切片的使用方式如下:
<字符串或字符串变量>[N:M ]
[N:M]获取字符串中从N到M(但不包含M)间连续的子字符串,其中,N和M为字符串的索引序号,可以混合使用正向递增序号和反向递减序号。如果N缺失,则默认将ⅣN设为0;如果M缺失,则默认表示到字符串结尾。示例如下。
切片要求N和M都在字符串的索引区间。使用正向索引时,如果N对应的字符在M对应的字符右边,则返回空字符串;使用反向索引时,如果N对应的字符在M对应的字符右边,则返回空字符串。总结规律可得出:不论是正常索引还是反向索引,只要N大于等于M,则返回空字符串。示例如下。
(2)高级切片方法
字符串切片还有一种高级用法,使用方式如下:
<字符串或字符串变量>[N:M:K]
该方法获取字符串从N到M(不包含M)、以K为步长的子字符串,其中,N和M为字符串的索引序号,可以混合使用正向递增序号和反向递减序号,K为整数。特别是当K为负数时,将返回从M到N(不包含N)的反向字符子串。示例如下。
三、字符串的基本格式化
format,翻译成中文,其含义为:格式。
在字符串中整合变量时需要使用字符串的格式化方法。字符串格式化用于解决字符串和变量同时输出时的格式安排问题。
1.无指定槽序号的format
Python语言推荐使用format()格式化方法,其使用方式如下:
<模板字符串>.format(<逗号分隔的参数>)
其中,模板字符串是一个由字符串和槽组成的字符串,用来控制字符串和变量的显示效果。槽用大括号({})表示,对应format()方法中逗号分隔的参数。例如:
2.有指定槽序号的format
如果模板字符串有多个槽,且槽内没有指定序号,则按照槽出现的顺序分别对应format()方法中的不同参数。例如:
format()方法中参数根据出现先后存在一个默认序号,如图3.1所示。
可以通过format()参数的序号在模板字符串槽中指定参数的使用,参数从0开始编号,如图3.2所示。示例如下。
如果字符串中出现槽的数量和format()方法中出现的参数数量不一致,即程序不能够通过简单的顺序对应确定参数使用,则必须在槽中使用序号指定参数使用,否则会产生IndexError的错误。
如果希望在模板字符串中直接输出大括号,使用{{文本{}文本}},其中最里面的一个{}表示槽。示例如下。
总结:.format(),实际是字符串的一个操作方法,也可以理解成一个自带的函数。
四、字符串的格式控制
见二级教材相关内容。
五、字符串操作符
操作符 | 描述 |
+ | x+y ,连接两个字符串x与y |
* | x*n或n *x,复制n次字符串x,其中n为数字。 |
in | x in s ,如果x是s的子串,返回True,否则返回False |
not in | x not in s ,如果x不是s的子串,返回True,否则返回False |
六、字符串处理函数
函数 | 描述 |
len(x) | 返回字符串x的长度,也可返回其他组合数据类型的元素个数。中英文字符及标点字符等都是1个长度单位。 |
str(x) | 返回任意类型x所对应的字符串形式。可以将二进制、八进制、十六进制数字转换为十进制数。 |
chr(x) | 返回Unicode 编码x 对应的单字符 |
ord(x) | 返回单字符x表示的Unicode编码 |
hex(x) | 返回整数α对应十六进制数的小写形式字符串 |
oct(x) | 返回整数x对应八进制数的小写形式字符串 |
七、字符串的操作方法
“方法”是程序设计中的一个专有名词,属于面向对象程序设计领域。在Python解释器内部,所有数据类型都采用面向对象方式实现,因此,大部分数据类型都有一些处理方法。
方法也是一个函数,只是调用方式不同。函数采用func ( x )方式调用,而方法则采用<a>.func( x)形式调用,即 A.B()形式。方法仅作用于前导对象<a>。
方法 | 描述 |
str.lower() | 返回字符串str的副本,全部字符小写 |
str.supper() | 返回字符串str的副本,全部字符大写 |
str. capitalize() | 将字符串第一个字符转换成大写。 |
str.title() | 将字符串每个单词首字母转换成大写。 |
str.split(sep=”a”) | 返回一个根据sep分割字符串后的列表。根据sep分隔字符串 str。sep不是必需的,默认采用空格分隔, sep可以是单个字符,也可以是一个字符串。 |
str.count(“sub”) | 返回回子串sub出现的次数 |
str.replace(“old”,“new”) | 返回字符串 str的副本,所有old子串被替换为new子串 |
str.center(width,fillchar) | 返回长度为 width 的字符串。其中,str处于新字符串中心位置,两侧新增字符采用fillchar填充,当width小于字符串长度时,返回str ;fillchar是单个字符。 |
str.ljust(width,fillchar) | 左对齐,右填充。用法同str.center() |
str.rjust(width,fillchar) | 右对齐,左填充。用法同str.center() |
str.strip(“char”) | 去掉字符串两侧的字符串char。 |
str.lstrip(“char”) | 去掉字符串左侧的字符串char。 |
str.rstrip(“char”) | 去掉字符串右侧的字符串char。 |
str.jion(inter) | 将str作为分割符添加在可迭代变量inter中的每个元素中间。 |
str.format() | 格式化字符串 |
str.find(子串,开始下标,结束下标) | 检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则返回-1。 |
str.index(子串,开始下标,结束下标) | 检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则报异常。 |
str.rfind() | 和find()功能相同,但查找方向为右侧开始。 |
str.rindex() | 和index()功能相同,但查找方向为右侧开始。 |
str. startswith(子串,开始下标,结束下标) | 检查字符串是否是以指定子串开头,是则返回True,否则返回False。如果设置开始和结束位置下标,则在指定范围内检查。 |
str. endswith(子串,开始下标,结束下标) | 检查字符串是否是以指定子串结尾,是则返回True,否则返回False。如果设置开始和结束位置下标,则在指定范围内检查。 |
总结:有返回值的函数,必须用一个变量接收这个返回值。如果没有返回
八、字符串的比较运算
与数值比较运算一样,字符串也可以进行比较运算,有6种操作,即大于(>)大于等于(>= ),小于(<)、,小于等于(<=),等于(==),不等于(!=)。
两个字符串比较采用从左向右依次比较字符的方式,根据字符对应Unicode编码值大小决定字符串大小关系。
九、单词释义
strip /strɪp/ 除去
format /ˈfɔːmæt/ 格式
split /splɪt/ 分割
第二节 组合数据类型
能够表示多个数据的类型称为组合数据类型。Python语言中最常用的组合数据类型有3大类,分别是序列类型、集合类型和映射类型。
序列类型是一维元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他。Python语言提供了多种序列数据类型,其中比较重要的是字符串类型,列表类型和元组类型。
由于序列的元素之间存在顺序关系,序列类型使用相同的索引体系。由此可以得出,Python中序列类型数据在索引和切片功能上的使用方法,同字符串是一致的。
1.序列的操作符
操作符 | 描述 |
+ | x+y ,连接两个字符串x与y |
* | x*n或n *x,复制n次字符串x,其中n为数字。 |
in | x in s ,如果x是s的子串,返回True,否则返回False |
not in | x not in s ,如果x不是s的子串,返回True,否则返回False |
2.序列类型的操作函数
函数 | 描述 |
len(s) | 序列s 的元素个数(长度) |
min(s) | 序列s 中的最小元素。如果列表元素间不能比较,则会报错。数字和数字可以比较,字符串同字符串可以比较,但是数字和字符串不可以比较。 |
max(s) | 序列s 中的最大元素。比较方法同min(s) |
s.index(x) | 序列s 中第一次出现元素x的位置 |
s.count(x) | 序列s中出现x的总次数 |
集合类型和映射类型分别对应Python中的数据类型set和dict。详细内容见具体小节。
3.关于保留字del用法总结
函数 | 描述 | |
del(list/dict) | 删除列表list或字典dict | |
del(list[i]/dict[i]) | 删除列表lsit中下标为i的元素,删除字典dicy中key为i的值 | |
del x | 删除列表list或字典dict | |
del list[i]/dict[i] | 删除列表lsit中下标为i的元素,删除字典dicy中key为i的值 |
第三节 列表
一、概述
列表没有长度限制,元素类型可以不同,不需要预定义长度。
列表是一个十分灵活的数据结构,它具有处理任意长度、混合类型的能力,并提供了丰富的基础操作符和方法。当程序需要使用组合数据类型管理批量数据时,请尽量使用列表类型。
二、列表的基本操作
1.空列表的创建
方法1:list1=[]
方法2:list1=list()
2.修改指定下标的数据
语法:
列表名[下标]=值
三、列表的操作方法
方法 | 描述 |
ls.append(x) | 在列表ls的结尾追加一个元素x |
ls.extend(x) | 在列表ls的结尾逐个追加序列x中的所有元素。同ls.append(x)的区别在于ls,extend(x)追加的不是单个元素,而一个序列。当然单个元素的字符串,列表、元素也属于序列 |
ls.insert(i,x) | 将元素x增加至列表ls索引[i]位置。 |
ls.clear() | 清除ls中的所有元素 |
ls.remove(x) | 将列表中出现的第一个元素x删除 |
ls.pop(i) | 将列表ls中下标为i的元素删除,其返回值是列表ls中下标为i的元素。 |
ls.reverse() | 将列表ls中的元素倒序排列 |
ls.sort(key=None,reverse=True) | 对列表ls中的元素进行排序。reverse=True为降序排列,reverse=False为升序排列 |
ls.copy() | 生成一个新列表,复制ls 中所有元素 |
四、单词释义
append /əˈpend/ 追加
extend /ɪkˈstend/ 扩大
reverse /rɪˈvɜːs/ 逆向,逆转
第四节 元组
一、概述
元组类型一旦定义就不能修改,在编程中不够灵活,同时,元组类型的所有操作都可以由列表类型实现,因此,一般编程中,如果需要自定义变量,通常以列表类型替代元组类型使用。如果确认编程中不需要修改数据,可以使用元组类型。
元组类型主要在Python语法相关的场景使用,例如,当函数返回多个值时,多个返回值以元组类型返回,实际上返回一个数据类型。
由于列表类型覆盖了元组类型所有主要功能,这里仅对元组做简要介绍,建议读者了解元组类型,在编程时尽量使用列表类型。
二、空元组的创建
方法1:tuple1=()
方法2:tuple 1= tuple()
三、元组的操作方法
元组的操作方法都是通用操作方法。
第五节 集合
一、概述
集合类型是一个元素集合,元素之间无序,相同元素在集合中唯一存在。
Python语言中的集合类型与数学中的集合概念一致,即包含0个或多个数据项的无序组合。集合中的元素不可重复,元素类型只能是不可变数据类型,例如整数、浮点数、字符串,元组等。相比较而言,列表、字典和集合类型本身都是可变数据类型,不能作为集合的元素出现。
集合类型主要用于元素去重,适合于任何组合数据类型。
打印集合中元素,输出的顺序是随机的。
二、集合的运算
Python集合的运算规律同数学中的集合运算规律。
集合运算符
集合运算符 | 含义 | 示意图 |
A&B | 交集 | |
A|B | 并集 | |
A-B | 差集 | |
A^B | 补集 | |
三、空集合的创建方法
方法:set1=set()
切记:不能使用使用set1={}的方法创建空集合,因为{}是用来创建空字典的。
四、集合的操作方法
方法 | 描述 |
s.add(x) | 如果数据项x不在集合s 中,将x增加到s |
s.update(x) | 在集合s中追加单个序列x。同s.add(x)的别,前者追加单个数据,而后者追加的是单个序列。 |
s.remove(x) | 删除集合中指定的数据x;若不存在则会报错 |
s.discard(x) | 删除集合中指定的数据x;若不存在则不会报错 |
s.pop() | 随机删除集合中的某个数据,并返回这个数据。 |
s.clear() | 清除s中所有数据项 |
五、单词释义
update /ˌʌpˈdeɪt/ 更新
discard /dɪˈskɑːd/ 丢弃
第六节 字典
一、概述
“键值对”是组织数据的一种重要方式,广泛应用在当代大型信息系统中,如Web系统。键值对的基本思想是将“值”信息关联一个“键”信息,进而通过键信息查找对应的值信息,这个过程叫映射。Python语言中通过字典类型实现映射。
键和值通过英文冒号连接,不同键值对通过英文逗号隔开。从 Python 设计角度考虑,由于大括号{}可以表示集合,所以,字典类型也具有和集合类似的性质,即键值对之间没有顺序且不能重复。可以简单地把字典看成元素是键值对的集合。注意,尽管都使用大括号,但集合与字典是不同的类型。
映射类型是“键-值”数据项的组合,每个元素是一个键值对,表示为( key , value ) ,元素之间是无序的。键值对(key , value)是一种二元关系,源于属性和值的映射关系。键( key)表示一个属性,也可以理解为一个类别或项目,值( value)是属性的内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。
映射类型是序列类型的一种扩展。在序列类型中,采用从0开始的正向递增序号进行具体元素值的索引。而映射类型则由用户来定义序号,即键,用其去索引具体的值。键值对的概念在计算机系统中十分常见,也是表达和存储数据的常见方式。
二、字典的基本操作
1.空列表的创建
方法1:dict1={}
方法2:dict1=dict()
2.修改指定key的数据
语法:
字典名[key]=值
3.字典增加数据
字典名[key]=值
注意:若key值存在,则修改数据;若key不存在,则添加数据。
4.查找指定指定key的数据
print(字典名[key]=值)
三、字典的操作方法
方法 | 描述描述 |
d.keys() | 返回所有的键信息,返回结果为一个可遍历对象,数据类型为Python的内部数据类型dict_keys。 |
d.values() | 返回所有的值信息,返回结果为一个可遍历对象,数据类型为Python的内部数据类型dict_values。 |
d.items() | 返回所有的键值对,返回结果为一个可遍历对象,数据类型为Python的内部数据类型dict_items。 |
d.get(key,default) | 键存在则返回相应值,否则返回None |
d.pop(key,default) | 键存在则返回相应值,同时删除键值对,否则会报错 |
d.popitem() | 随机从字典中取出一个键值对,以元组( key,value)形式返回,同时将该键值对从字典中删除 |
d.clear() | 删除所有的键值对,清空字典 |
第七节 组合数据类型转换和遍历、拆包
函数 | 描述 |
tuple(x) | 将某个序列x转换成元组 |
list(x) | 将某个序列x转换成列表 |
set(x) | 将某个序列x转换成集合 |
遍历:依次访问可遍历对象中的各个数据。
拆包:
1.元组拆包
tuple1=(1,2,3)
a,b,c=tuple1
print(a) # 1
print(b) # 2
print(c) # 3
2.字典拆包包
dict1={'姓名': '白良贺', '年龄': 38, '性别': '男'}
u,v,w=dict1
print(u) # 白良贺
print(v) # 38
print(w) # 男
第八节 推导式
一、列表推导式总结
1.语法:
[表达式 for 迭代变量 in 可迭代对象 if 条件表达式]
表达式类型:i,i*6,i+8,[i**2,i+7]
可迭代对象:range(6),dict1.values,列表、元组、集合
临时变量:可以任何符合命名规则的变量名字
2.带if的表达式
3.多for表达式
二、集合推导式
同列表推导式
三、字典推导式
语法:
变量={key:value for key,value in 序列}
示例1:
dict1={i:i^2 for in range(1,5)}
示例2,将两个列表合为一个字典:
list1=["name","age","gender"]
list2=["Tom",20,"male"]
dict2={list1[i]:list2[i] for i in range(len(list1))}