目录
字符串(str)
定义:使用引号定义一个字符串,可以用单引号,双引号,单三引号,双三引号。其中的三引号可以在定义多行内容的字符串时使用,如果不用三引号来定义多行内容的字符串时,需要使用转义符\n进行换行操作,比较麻烦,看起来也不直观。字符串中有引号时,可以使用与其类型不同的其他引号作为python定义字符串语句的解释,放在最外层。
字符串的转义
字符串转义 | |
转义字符 | 说明 |
\ | 放在行尾,如果在编写代码时,在同一行的代码太长,可以放在这行的最后,再起一行续写 |
\\ | 反斜杠符号 |
\' (\") | 单引号或双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,yy代表的字符,例如:\o12代表换行 |
\xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出 |
字符串的运算
字符串运算 | |
运算类型 | 说明 |
加法运算 | 字符串拼接 |
乘法运算 | 重复字符串输出 |
成员运算 | 使用成员运算符in或not in 判断某个元素是否存在在字符串中(运算结果为bool值) |
遍历(迭代) | 使用for循环遍历出字符串中的每个元素 |
r/R | 原始字符串,防止转义(r表示原始字符串:raw string) |
% | 格式化 |
字符串的格式化
字符串格式化方法有两种
使用%占位符(printf风格)
使用%占位符表示这个位置先占着,然后使用变量元素来填充,填充元素为元组形式。%是一种格式化符号,python解释器对其处理方式是调用内置函数,并将对应的格式化对象作为参数传入(格式化的对象可以是整数、浮点数、列表元组等任何类型的对象),返回的结果字符串填入对应占位符。
使用占位符需要注意的几点:
- 占位符的位置数和后面的参数个数要一致,并相互对应。
- 占位符后面的变量参数一定要放在元组中,当元组参数元素大于两个时,不能省略元组括号。
- 只有一个元组参数时可以不用括号且不用逗号。
占位符格式化符号:
格式化符号 | |
符号 | 作用 |
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %F和%E的简写 |
%p | 用十六进制数格式化变量的地址 |
占位符格式化辅助符号:
占位符格式化辅助符号 | |
符符号 | 功能 |
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ),一般省略不写 |
0 | 显示的数字前面填充'0'而不是默认的空格,只针对于右对齐使用,只用于整数 |
% | '%%'输出一个单一的'%' |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数 |
举例:
# -左对齐、+右对齐(可省略)、* 这里用数字8,指定宽度
print('工资收入:%-8s元/月,生活费:%8d元/月。'%(20000,1000))
# 0 填充右对齐的整数、m.n 形式指定宽度和小数点保留位数
print('工资收入:%08d元/月,生活费:%8.2f元/月。'%(20000,1000))
f-string风格
f-string格式化只有在python3.6以后的版本中有。
格式化方法是在字符串模板前面加上f,然后占位符使用{},括号里面直接放入对应的变量参数。
g,s = 20000,1000
print(f'工资收入:{g}元/月,生活费:{s}元/月')
格式符号 | 作用 |
---|---|
< | 左对齐(字符串默认对齐方式) |
> | 右对齐(数值默认对齐方式),可以不写 |
^ | 居中 |
g,s,o = 20000,1000,800
print(f'工资收入:{g:<10}元/月,生活费:{s:>10}元/月,其他:{o:^10}元/月')
# 不足位使用其他字符填充,可以是需要的任意字符,通过例子可以看出这个填充的字符可以在对齐符号的前面或
# 者后面,但为了不出现特殊情况,如使用>/</^/=填充时,最好放在前面使用
print(f'工资收入:{g:<010}元/月,生活费:{s:>010}元/月,其他:{o:^010}元/月')
print(f'工资收入:{g:?<10}元/月,生活费:{s:0>10}元/月,其他:{o:0^10}元/月')
# 支持小数使用,前一个数字代表宽度,后一个代表小数点位数
print(f'工资收入:{g:10.2f}元/月,生活费:{s:>10}元/月,其他:{o:^10}元/月')
使用str.format()进行格式化,format前面{}中可以指定后面参数的顺序(按索引),也可以有对齐方式符号的使用
st = '你好意思hello'
print('{2}的{1}是{0}'.format(st[:2],st[2:4],st[4:]))
字符串方法
str1 = 'hello world'
print(str1.capitalize()) # capitalize()将字符串的第一个字符转换为大写
print(str1.center(19,'*')) # center(width,fillchar)返回一个指定宽度的字符,返回一个指定的宽度width居中的字符串,fillchar为填充的字符,默认为空格。
print(str1.count('o')) # count(str, beg= 0,end=len(string)),返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数
bytes.decode(encoding="utf-8", errors="strict") # Python3中没有decode方法,但我们可以使用bytes对象的decode()方法来解码给定的bytes对象,这个bytes对象可以由str.encode()来编码返回。
print(str1.encode(encoding='UTF-8',errors='strict')) # 以encoding指定的编码格式编码字符串,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace'
print(str1.endswith('he')) # endswith(suffix, beg=0, end=len(string)),检查字符串是否以obj结束,如果beg或者end指定则检查指定的范围内是否以obj结束,如果是,返回True,否则返回False.
# startswith(substr, beg=0,end=len(string)), 检查字符串是否是以指定子字符串substr开头,是则返回True,否则返回False。如果beg和end指定值,则在指定范围内检查。
print(str1.expandtabs(tabsize=4)) # expandtabs(tabsize=8),把字符串string中的tab符号转为空格,tab符号默认的空格数是8。
print(str1.find('w')) # find(str, beg=0, end=len(string)),检测str是否包含在字符串中,如果指定范围beg和end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
print(str1.index('l')) # index(str, beg=0, end=len(string)),跟find()方法一样,只不过如果str不在字符串中会报一个异常。
print(str1.isalnum()) # isalnum(),如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
print(str1.isalpha()) # isalpha(),如果字符串至少有一个字符并且所有字符都是字母或中文字则返回True, 否则返回False
print(str1.isdigit()) # isdigit(),如果字符串只包含数字则返回True 否则返回False.
print(str1.islower()) # islower(),如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True,否则返回False
print(str1.isnumeric()) # isnumeric(),如果字符串中只包含数字字符,则返回True,否则返回False
print(str1.isspace()) # isspace(),如果字符串中只包含空白,则返回True,否则返回False.
print(str1.istitle()) # istitle(),如果字符串是标题化的(见title())则返回True,否则返回False
print(str1.ljust(20,'&')) # ljust(width[, fillchar]),返回一个原字符串左对齐,并使用fillchar填充至长度width的新字符串,fillchar默认为空格。
print('*'.join(str1)) # join(seq),以指定字符串作为分隔符,将seq中所有的元素(的字符串表示)合并为一个新的字符串
# rfind(str, beg=0,end=len(string)),类似于 find()函数,不过是从右边开始查找.
# isupper(),如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False
# len(string),返回字符串长度
# lower(),转换字符串中所有大写字符为小写.
# split(str="", num=string.count(str)),以str为分隔符截取字符串,如果num有指定值,则仅截取num+1个子字符串
# strip([chars]),在字符串上执行lstrip()和rstrip()
# lstrip(),截掉字符串左边的空格或指定字符。
# rstrip(),删除字符串字符串末尾的空格.
# rindex( str, beg=0, end=len(string)),类似于 index(),不过是从右边开始.
# max(str),返回字符串 str 中最大的字母。
# min(str),返回字符串 str 中最小的字母。
# maketrans(),创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
# replace(old, new [, max]),把将字符串中的str1替换成str2,如果max指定,则替换不超过max次。
# rjust(width,[, fillchar]),返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度width的新字符串
# splitlines([keepends]),按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数keepends为False,不包含换行符,如果为True,则保留换行符。
# swapcase(),将字符串中大写转换为小写,小写转换为大写
# title(),返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见istitle())
# translate(table, deletechars=""),根据str给出的表(包含256个字符)转换string的字符, 要过滤掉的字符放到deletechars参数中
# upper(),转换字符串中的小写字母为大写
# zfill (width),返回长度为 width 的字符串,原字符串右对齐,前面填充0
# isdecimal(),检查字符串是否只包含十进制字符,如果是返回true,否则返回false。
列表(list)
列表的定义:使用[]来定义列表
增删改查
操作类型 | 方法名 | 功能 | 参数 | 返回值 |
增 | append(data) 追加 | 在列表的末尾添加数据 | data:加入到列表中的数据 | None |
extend(model)追加全部 | 在列表的末尾添加参数对象中的所有数据 | model:保存有数据的存储模型,该模型接受列表、元组、集合类型的对象 | None | |
insert(idx,data)插入 | 在列表的指定位置插入数据,如果索引位置超过列表数据总量,数据将插入到列表末尾 | idx:插入数据的索引位置,data:加入列表中的数据 | None |
删 | pop(idx)取出后删除 | 从列表中获取并删除指定索引位置上的数据,如果索引值超过列表数据总量将报错 | idx:要从列表中获取的数据对应的索引位置 | 获取到的数据 |
del name_list | 彻底删除列表 | 获取列表报错 | ||
clean() | 强制清空列表 | 无 | None | |
remove(data)删除 | 从列表中删除指定的数据,如果数据不存在将报错 | data:要从列表中删除的数据 | None |
改 | list[idx]='data' | 修改指定位置的元素 | |
list.reverse() | 反向列表数据 | ||
list.sort(cmp=None, key=None, reverse=False) | 将列表数据进行排序,默认为顺序排列 | reverse=True为倒序排列 |
查 | index(data)查询位置 | 查询列表中指定数据对应的索引,如果数据不存在将报错 | data:在列表中要查询的数据 | 查询数据第一次出现的索引 |
count(data)统计数量 | 统计列表中指定数据出现的数量 | data:在列表中要统计数量的数据 | 统计数据出现的次数 |
列表运算
列表的运算 | ||
运算类型 | 表达式 | 说明 |
加法运算 | list1 + list2 | 将两个列表拼接成一个 |
乘法运算 | list*num(int) | 将一个列表中元素复制num个 |
成员运算 | obj in list | 使用成员运算符in或not in 判断某个元素是否存在在列表中(运算结果为bool值) |
遍历(迭代) | for j in list: | 使用for循环遍历出列表中的每个元素 |
列表函数
列表函数 | |
函数方法 | 结果说明 |
len(list) | 计算列表元素的个数 |
max(list) | 返回列表中的最大值 |
min(list) | 返回列表中的最大值 |
list(seq) | 将一个可迭代类型转换为列表 |
深浅复制
import copy
li1 = [1,2,3,4,5]
li2 = [li1,'A','B','C','D','E']
print('源列表:')
print(id(li1),li1)
print(id(li2),li2)
print(id(li2[0]),li2[0])
#浅复制
li3 = li2.copy()
li2[0][2] = '哈哈哈'
print('浅复制结果:')
print(id(li1),li1)
print(id(li2),li2)
print(id(li3[0]),li3[0])
print(id(li3),li3)
import copy
li1 = [1,2,3,4,5]
li2 = [li1,'A','B','C','D','E']
print('源列表:')
print(id(li1),li1)
print(id(li2),li2)
print(id(li2[0]),li2[0])
# 深复制
li4 = copy.deepcopy(li2)
li2[0][2] = '哈哈哈'
print('深复制结果:')
print(id(li1),li1)
print(id(li2),li2)
print(id(li4[0]),li4[0])
print(id(li4),li4)
深浅复制的区别:通过上面的结果显示浅复制后原来列表中元素发生了变化,但列表id没有变化,浅复制只是复制了原来列表的数据,并没有生成新的存储空间进行存储,在修改内部元素的时候原表数据同样发生变化,而深复制复制后的id发生了变化,说明深复制是复式并重新将复制的内容存储在新的空间,相当于重新开辟一个存储空间,所以改变内部列表元素只会在新空间存储的列表基础上修改内容,不会对原来列表数据进行修改。所以使用中为了保证数据源不被修改,要使用深复制。
元组(tuple)
元组(Tuple):元组的内容是不能改变的。元组元素只支持查看和del删除,虽然没有增删改,但这种数据类型保证了数据的安全性,可以防止数据被篡改。
元组的定义:使用圆括号定义元组,如果括号里面没有内容就是一个空的元组,同列表一样,我们可以将定义的元组赋值给一个变量,a = () ,元组中的每个元素对象之间也是用逗号隔开。
不一样的元组
一个元素的元组:元组中只有一个元素时,元素后面需要有逗号,否则数据类型不会被当作元组。
tup1,tup2 = ('鸣'),(1)
print('tup1的类型:',type(tup1),'\ntup2的类型:',type(tup2))
,
添加逗号后的结果:
tup1,tup2 = ('鸣',),(1,)
print('tup1的类型:',type(tup1),'\ntup2的类型:',type(tup2))
省略括号的元组:定义元组时,可以省略括号
a = '你好',3,['f',0.8,[8,0]],('世界观','人生观')
print(a)
print(type(a))
元组的函数
元组函数 | |
函数方法 | 结果说明 |
len(tuple) | 计算元组元素的个数 |
max(tuple) | 返回元组中的最大值 |
min(tuple) | 返回元组中的最大值 |
tuple(seq) | 将一个可迭代类型转换为元组 |
元组的运算
元组的运算 | ||
运算类型 | 表达式 | 说明 |
加法运算 | tuple1 + tuple2 | 将两个元组拼接成一个 |
乘法运算 | tuple*num(int) | 将一个元组中元素复制num个 |
成员运算 | obj in tuple | 使用成员运算符in或not in 判断某个元素是否存在在元组中(运算结果为bool值) |
遍历(迭代) | for j in tuple: | 使用for循环遍历出元组中的每个元素 |
序列类型的索引和切片
索引
在sequence(序列)中每个元素都对应一个下标,即索引。从第一个元素开始的索引按顺序是从0开始。
按顺序索引为从0开始的正数,按倒序索引为从-1开始的负数。如果索引写成-0则和索引为0的元素相同。
索引同时还支持运算
切片
Sequence特性的数据对象都支持切片操作。索引可以取出字符串中的某一个元素,切片则可以取出字符串中的一段元素。
切片的方法:[n:m] n表示切片的切取字符串元素的起始位置索引,m为结束元素的索引加1,切片同索引支持负数。
省略一个切片位置索引:[:m]表示切取字符串从开头到索引为m-1之间的元素
[n:]表示切取索引为n开始到结束的一段元素
切片后面可以有步长,步长表示每隔前一个索引加步长的位置取出元素:
li1 = [1,2,3,4,5]
li2 = [1,2,3,4,5,'A','B','C','D','E']
print(li2[1:9:3])