11.字符串切片slice操作
默认步长是1
(正数)
[:]提取整个字符串 print("abcdef"[:]) #结果为“abcdef”
[start:]从start索引到结尾 print(“abcdef”[2:]) #a是0,b是1,c是2,结果为“cdef”
[:end]从头开始直到end-1 print(“abcdef”[:2]) #"ab"
[start:end]从start到end-1(包头不包尾) print(“abcdef”[2:4]) #“cd”
[start:end:step]从start到end-1步长为step print(“abcdef”[1:5:2]) #''bd''
(负数)
“stuvwxyz”[-3:] #从倒数第三个开始到结尾“xyz”
“stuvwxyz”[-8:-3] #倒数第八到倒数第三(包头不包尾)“stuvw”
“stuvwxyz”[::-1] #步长为负反向提取“zyxwvuts”
起始偏移量start小于0,则会当做0,终止偏移量end大于“长度-1”会直接取到末尾
12.split()分割和join合并
split()可以基于指定分隔符将字符串分割为多个子字符串。如果不指定则默认使用空白字符
a = “to be or not to be”
b = a.split()
c = a.split(be)
print(b) #"to",“be”,“or”,“not”,“to”,“be”
print(c) #“to”,“or not to”
join()的作用和split相反
a=['l','m','h']
'*'.join(a)
'l*m*h'
join()函数仅仅新建一次新对象,join()效率比+高很多
13.字符串驻留机制和字符串比较
常量字符串只保留一次
两个变量同时指向一个字符串,则其是完全一致的
14.字符串常用方法汇总
a = "abcdfrivhivhsivdkvsivjvjs"
print(a.startwith("abcd")) #True以指定字符串开头
print(a.find("f")) #4第一次出现指定字符的位置
print(a.rfind("j")) #23最后一次出现指定字符的位置
print(a.count("j")) #2指定字符串一共出现了几次
去除首尾信息
print(" l m h ".strip()) #"l m h"什么也不写就去除首尾空格
print("*l m h*". lstrip(*)) #去开头的*
print("*l m h*". rstrip(*)) #去末尾的*
大小写转换
a = "qiQi is in xidian univercity"
print(a.capitalize()) #Qiqi is in xidian univercity只有首字母大写
print(a.title()) #Qiqi Is In Xidian Univercity每个单词首字母大写
print(a.upper()) #QIQI IS IN XIDIAN UNIVERCITY全部大写
print(a.swapcase()) #QIqI IS IN XIDIAN UNIVERCITY大小写进行转换
格式排版
c = "hello"
print(c.ljust(20,"?")) #hello??????????????? 20个字符已经写好的居左,剩下用?代替
print(c.center(20,"?")) #???????hello???????? 20个字符已经写好的居中,剩下用?代替
print(c.rjust(20,"?")) #???????????????hello 20个字符已经写好的居右,剩下用?代替
特征判断方法
isalnum()是否由字母(或汉字)或数字组成
isalpha()是否只有字母或汉字组成
isdigit()是否只有数字组成
isspace()是否为空白符
isupper()是否为大写字母
islower()是否为小写字母
15.字符串的格式化
a = "年龄是:{1},名字是:{0}" #顺序无关,只是数字对应format中的排序
b = a.format("lmh",18)
print(b)
#年龄是:18,名字是:lmh
a = “名字是:{name},年龄:{age}”
b = a.format(age=18,name="lmh")
print(b)
#可以使用name和age,顺序就不重要了
16.填充和对齐
^居中<左对齐>右对齐,后面带宽度
:后面带填充的字符,只能是一个字符,不指定的话默认用空格代替
a = "我是{0},我喜欢数字{1:*^9}".format("lmh","8")
#我是lmh,我喜欢数字****8****
17.数字格式化
浮点数通过f,整数通过d进行需要的格式化
a = "我是{0},我的计算结果是{1:.2f}" #.2f表示格式化为保留两位小数的浮点数,会进行四舍五入
b = a.format("lmh",314.3487)
print(b)
#我是lmh,我的计算结果是314.35
18.可变字符串
原地修改字符串(一开始就定义一个可变字符串),可以使用io.StringIO对象或array模块
import io #调用io模块
a = "abcdccakjioja"
aio = io.StringIO(a) #aio是可变字符串
print(aio) #只能获得字符串的地址
print(aio.getvalue()) #getvalue()可以获得字符串的值
aio.seek(3) #指针定位到索引3的位置
aio.write("????")
print(aio.getvalue())
#abcdccakjioja
#abc????kjioja
22 列表
1.序列(列表,元组,字典,集合,字符串)
序列是一种数据存储方式,序列中存储的是对象的地址
- 列表:用于存储任意数目,任意类型的数据集合.是内置可变序列,包含多个元素有序连续的内存空间 a=[10,20,30,40] [ ]里的是列表的元素,可以是任意类型a=[10,'abc',True] Python的列表大小可变
2.列表的创建
[ ]或使用list()
- range()创建整数列表,格式为range([start],end,[step]) 注意还是包头不包尾
start参数:可选,表示起始数字,默认是0
end参数:必选,表示结尾数字
step参数:可选,表示步长,默认是1
range()直接返回的是一个对象也就是原有的范围,而不是列表,需要list()将其转变为列表对象
a = list(range(15,9,-2))
print(a)
#[15, 13, 11]
- 推导式生成列表
可以进行更复杂的运算
a = [x*3 for x in range(0,30,3) if x%4==0]
print(a)
#[0, 36, 72]
3.列表元素的添加
尾部添加,删除元素(推荐)
增加和删除元素,列表会自动进行内存管理,涉及列表元素大量移动,效率较低,除非必要,只在尾部添加删除元素
- append()方法(速度最快)
原地修改列列表,在列表尾部添加新的元素
a = [20,40]
a.append(50) #注意这里的写法
print(a)
#[20, 40, 50]
- +运算符操作
并不是真正的尾部添加元素,而是创建新的列表对象
a = [20,40]
a = a+[50]
print(a) #两次地址不一样,是创建了新的对象
#[20, 40, 50]
- extend()方法
将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象
a = [20,40]
b = [50,60]
a.extend(b) #原对象修改
print(a)
#[20, 40, 50,60]
- insert()插入元素
可以将指定的元素插入到列表对象的任意指定位置。让插入位置及其后面所有元素进行移动,会影响处理速度
a = [10,20,30]
a.insert(2,100) #在2的位置进行插入操作,插入的元素是100
print(a)
#[10, 20, 100, 30]
- 乘法扩展
生成新列表,新列表元素是原列表元素的多次重复
a = ['lmh',100]
b = a*3
print(a) #['lmh',100]
print(b) #['lmh',100,'lmh',100,'lmh',100]