字符串的操作
-
str索引切片
-
按索引,第一个是0: s1[index]
对字符串进行索引,切片出来的数据都是字符串类型
-
按切片,顾头不顾尾:s1[start_index: end_index+1]
s1 = 'python啊' #取 Python s2 = s1[:6] #0可省略
-
切片可控制步长:s1[start_index: end_index+1: 步长]
s1 = 'python啊' #取pto s2 = s1[:5:2] #步长为2 #这里有个问题就是,为什么中间是5而不是6
-
倒序(倒着取)
s1 = 'Python全践22期' s2 = s1[-1:-6:-1] #取 期22践全
-
-
str常用操作方法
-
upper:将字母全改为大写 lower:将字母全改为小写
#应用:输入验证码,不区分大小写 username = input('用户名:') password = input('密码:') code = 'QweA' print(code) your_code == input('请输入验证码,不区分大小写:') if your_code.upper() == code.upper(): if username == '太白' and password == '123' print('登录成功') else: print('用户名密码错误') else: print('验证码错误')
-
startswith() 判断是否以某个字母开头
s = 'taiBai' print(s.startswith('t')) #返回True print(s.startswith('tai')) #返回True print(s.startswith('B',3,6)) #判断Bai是否以B开头
-
replace(self, old, new, count) 替换指定字符,可以规定个数,默认全换
msg = 'alex很nb,alex是老男孩教育的创始人之一,alex长的很帅' msg1 = msg.replace('alex','太白') print(msg1) #返回'太白很nb,太白是老男孩教育创始人之一,太白长的很帅'
-
strip:去除空白 空格 \t \n
s4 = ' \n太白\t' s5 = s4.strip() print(s5) #返回 太白
还可以去除指定字符
s4 = 'rre太白qsd' s5 = s4.strip('qresd') print(s5) #返回 太白 s6 = 'rre太r白qsd' s7 = s6.strip('qresd') print(s7) #返回 太r白,从前往后、从后往前依次识别进行去除,遇到不认识的就停止
-
split 默认按照空格分隔,返回一个列表 非常重要
s6 = '太白 女生 吴超' le = s6.split() print(le) #返回['太白','女生','吴超'] str ---> list s6 = '太白:女生:吴超' le = s6.split(':') print(le) #返回结果相同 s6 = ':barry:nvshen:wu' print(s6.split(':')) #返回['', 'barry', 'nvshen', 'wu'] print(s6.split(':',2)) #返回['', 'barry', 'nvshen:wu']
-
join(self, iterable) 非常好用
s1 = 'alex' s2 = '+'.join(s1) print(s2) #返回a+l+e+x le = ['太白', '女神', '吴超'] #列表里面的元素必须都是str类型 s3 = ':'.join(le) print(s3) #返回 太白:女神:吴超
-
count 返回字符串中指定的字符个数
s2 = 'fadfagagafsfse' print(s8.count('a')) #返回4
-
format 格式化输出,与%s没区别
第一种用法:
msg = '我叫{}今年{}性别{}'.format('大壮',25,'男')
第二种用法:
msg = '我叫{0}今年{1}性别{2}我依然叫{0}'.format('大壮',25,'男') print(msg) #按照索引
第三种用法:
a = 100 msg = '我叫{name}今年{age}性别{sex}'.format(age=a,sex='男',name='大壮') print(msg) #这样可以不按照顺序
-
is系列
name = 'taibai123' print(name.isalnum()) #字符串由字母或数字组成 print(name.isalpha()) #字符串只由字母组成 print(name.isdecimal()) #字符串只由十进制组成, 都返回bool类型
-
capitalize 首字母大写,其余变小写
s1 = 'taiBAi' print(s1.capitalize()) #返回 Taibai
-
swapcase 大小写翻转
s1 = 'taiBAi' print(s1.swapcase()) #返回 TAIbaI
-
title 每个单词的首字母大写
msg = 'taibai say hi' print(msg.title()) #返回 Taibai Say Hi
-
center 设置填充物
s1 = 'barry' print(s1.center(20)) #返回 barry ,总长度为20 print(s1.center(20,'*')) #返回 *******barry********
-
find 和 index 通过元素找索引
s1 = 'barry' print(s1.find('a')) #返回 1 print(s1.index('r')) #返回 2,找到第一个就返回
print(s1.find('o')) #返回 -1,找不到返回-1 print(s1.index('0')) #找不到则报错
-
列表的认识及操作
列表的创建
-
方式一:
le = [1,2,'alex']
-
方式二:
le = list('')
-
方式三:列表推导式
列表的增删改查
-
增
-
append:追加,加在列表尾部
le = ['太白','小明'] while 1: name = input('请输入新员工姓名:(Q或q退出程序)') if name.upper() == 'Q': break le.append(name) print(le)
-
insert:可以从中间插入
le = ['太白','女神','吴老师','xiao'] le.insert(2,'wusir') print(le) #['太白','女神','wusir','吴老师','xiao'],插到位置2
-
extend:迭代追加
le = ['太白','女神','吴老师','xiao'] le.extend('abcd') print(le) #['太白','女神','吴老师','xiao','a','b','c','d']
le.extend(['alex',1,3]) print(le) #['太白','女神','吴老师','xiao','alex',1,3]
-
-
删
-
pop:按照索引位置删除,默认删除最后一个
le = ['太白','女神','吴老师','xiao'] le.pop(-1) #按照索引删除(返回的是删除元素) print(le.pop(-1)) #返回 xiao print(le) #返回['太白','女神','吴老师']
-
remove:指定元素删除,如果有重名元素,默认删除左边第一个
le.remve('xiao') print(le) #['太白','女神','吴老师']
-
clear:清空
le.clear() print(le) #返回 []
-
del
按索引删除
del le[-1] print(le) #['太白','女神','吴老师']
按切片(步长)删除
del le[::2] print(le) #[女神','xiao']
-
-
改
le = ['太白','女神','吴老师','xiao'] le[0] = '男神' print(le) #['男神','女神','吴老师','xiao']
按切片改
le[2:] = 'abc' print(le) #['太白','女神','a','b','c'] 切片返回一个列表
按切片(步长)
le = ['太白','女神','吴老师','xiao','wuli'] le[::2] = 'abc' print(le) #['a','女神','b','xiao','c']
-
查
for i in le: print(i)
一些常用操作
-
sort 列表才有,用来排序
l1 = [5,4,3,7,8,6,1,9] l1.sort() print(l1) #返回 [1,3,4,5,6,7,8,9],默认从小到大排序
l1.sort(reverse=True) #从大到小 print(l1) #返回 [9,8,7,6,5,4,3,1]
字符串也可以排序,按照ASCLL码排,但没什么意义
-
list相加
l1 = [1,2,3] l2 = ['太白','123','女神'] print(l1+l2) #返回 [1,2,3,'太白','123','女神']
-
list相乘
l1 = [1,2,3] l2 = l1*3 print(l2) #[1,2,3,1,2,3,1,2,3]
-
问题:删除索引为奇数的元素
倒叙法删除列表元素 因为删除列表的某个元素,后面元素的索引会跟着进1
l1 = [11,22,33,44,55] for index in range(len(l1)-1,-1,-1): if index % 2 == 1: l1.pop(index) print(l1) #返回 [11,33,55]
思维置换,这里是创建一个新列表,往里面加
l1 = [11,22,33,44,55] new_l1 = [] for index in range(len(l1)): if index % 2 == 0: new_l1.append(l1[index]) l1 = new_l1 print(l1) #返回 [11,22,33]
-
元组的认识及操作
-
只读列表,存大量的数据,可以索引,切片(步长) (100,’太白‘,True,[1,2,3])
-
应用:
重要数据,用户名,密码,个人信息,不想让别人改动的一些数据,存在元组
-
元组的拆包,分别赋值
a,b = (1,2) #一一对应,不能多一个少一个 print(a,b) #返回 1 2
-
元组中如果只有一个元素,并且没有逗号,那么它不是元组,它与该元素的数据类型一致
tu1 = (2) print(tu1,type(tu1)) #返回 2 <class'int'>
tu1 = ([1,2,3]) print(tu1,type(tu1)) #返回 [1,2,3] <class'list'>
tu1 = (1,) print(tu1,type(tu1)) #返回 (1,) <class'tuple'>
-
count 计算一个元素出现的次数
tu = (1,2,3,3,3,2,2,3) print(tu.count(3)) #返回 4
-
index 跟上面一样
字典的认识及操作
字典的创建方式
-
方式一
dic = dict((('one',1),('two',2),('three',3))) print(dic) #返回{'one':1,'two':2,'three':3}
-
方式二
dic = dict(one=1, two=2, three=3)
-
方式三
dic = dict({'one':1,'two':2,'three':3})
验证字典的合法性:键不能用可变的数据类型,否则报错
键要唯一,不要重名,否则只打印后面的键
字典的增删改查
dic = {‘name’: ‘太白’,‘age’:18}
-
增:
- 直接加 有则改之,无则增加
dic['sex'] = '男' print(dic) #{'name':'太白','age':18,'sex':'男'}
dic['age'] = 23 print(dic) #{'name': '太白',‘age’:23}
-
setdefault 有则不变,无则增加
dic.setfault('hobby') print(dic) #{'name': '太白',‘age’:18,'hobby':None}
dic.setfault('hobby','球类运动') print(dic) #{'name': '太白',‘age’:18,'hobby':'球类运动'}
dic.setfault('age',45) #增加已有的 print(dic) #{'name': '太白',‘age’:18} 不改变
-
删
-
pop 按照键 删除键值对,有返回值
dic.pop('age') ret = dic.pop('age') print(ret) #返回 18 print(dic) #返回 {'name': '太白'}
dic.pop('hobby') #此时 会报错 set = dic.pop('hobby','没有此键') print(ret) #返回 没有此键
-
clear 清空
dic.clear() print(dic) #返回{}
-
del
del dic['age'] print(dic) #返回 dic = {'name': '太白'}
del dic['age1'] #若删除没有的键,则会报错
-
-
改
-
dic['name'] = 'alex' print(dic) #返回dic = {'name': 'alex',‘age’:18}
-
-
查 dic = {‘name’: ‘太白’,‘age’:18, ‘hobby_list’ : [‘直男’,‘钢管’,‘开车’]}
-
print(dic['hobby_list']) #返回 ['直男','钢管','开车'] #查到没有的键,则报错,所以不提倡
-
get
le = dic.get('hobby_list') print(le) #返回 ['直男','钢管','开车']
le = dic.get('hobby_list1') #打印没有的键 print(le) #返回None
le = dic.get('hobby_list1','没有此键eee') #有键打印键的值,没有此键打印后面的内容 print(le) #返回 没有此键eee
-
-
三个特殊: keys() values() items()
keys()
print(dic.keys()) #返回 dict_keys(['name','age','hobby_list']) #不能进行索引操作
print(list(dic.keys())) #返回 ['name','age','hobby_list'] #转化成列表
for key in dic.keys(): #还可以循环遍历 print(key)
values()
print(dic.values()) #返回 dict_values([太白',18,['直男','钢管','开车']]) print(list(dic.values())) #返回 [太白',18,['直男','钢管','开车']]
for value in dic.values(): print(value)
items()
print(dic.items()) #返回 dict_items([('name','太白'),('age',18), ('hobby_list',['直男','钢管','开车'])])
for i in dic.items(): print(i) #返回 ('name','太白') ('age',18) ('hobby_list',['直男','钢管','开车'])])
for key,value in dic.items(): print(key,value) #用到元组的拆包 #返回 name 太白 age 18 hobby_list ['直男','钢管','开车']
-
update 更新,可增可改
dic = ['name':'太白','age':18] dic.update(hobby='运动',hight='175') print(dic) #返回 {'name':'太白','age':18,'hobby':'运动','hight':175}
dic = ['name':'太白','age':18] dic.update(name='太白金星') print(dic) #返回 {'name':'太白金星','age':18}
dic = ['name':'太白','age':18] dic.update([(1,'a'),(2,'b'),(3,'c'),(4,'d')]) print(dic) #返回 {'name':'太白','age':18,1:'a',2:'b',3:'c',4:'d'}
dic1 = {'name':'jin','age':18,'sex':'male'} dic2 = {'name':'alex','weight':75} dic1.update(dic2) print(dic1) #返回 {'name':'alex','age':18,'sex':'male','weight':75} #有重复的键就覆盖,没有的就添加
-
fromkeys 值共用一个
dic = dict.fromkeys('abc',100) print(dic) #返回 {'a':100,'b':100,'c':100}
dic = dict.fromkeys([1,2,3],'alex') print(dic) #返回 {1:'alex',2:'alex',3:'alex'}
dic = dict.fromkeys([1,2,3],[]) print(dic) #返回 {1:[],2:[],3:[]} dic[1].append(666) print(dic) #返回 {1:[666],2:[666],3:[666]},一个加,所有都加
-
循环一个字典时,如果改变这个字典的大小,就会报错
#将字典中含k元素的键值对删除 dic = {'k1':'太白','k2':'barry','k3':'白白','age':18} for key in list(dic.keys()): #要转换成列表的形式,否则报错 if 'k' in key: dic.pop(key) print(dic)
-
例:有字符串 msg = “k:1|k1:2|k2:3|k3:4” 处理成字典{k:1…}
msg = "k:1|k1:2|k2:3|k3:4" l1 = msg.strip().split('|') dic = {} for i in l1: key,value = i.split(':') dic[key] = int(value) print(dic)
for循环和range
-
for循环 有限循环
for 变量 in iterable:
pass
s1 = '老男孩教育最好的讲师' for i in s1: print(i)
列表推导式
用一行代码构建一个比较复杂有规律的列表
-
循环模式
[ 变量(加工后的变量) for 变量 in iterable ] ,多理解这里加工后的变量
l1 = [i for i in range(1,11)] #将1到10放在一个列表中
#从Python1期到Python100期 放入一个列表 print([f'python{i}期' for i in range(1,101)])
-
筛选模式
[ 变量(加工后的变量) for 变量 in iterable if 条件 ]
#打印30以内能被3整除的数 l1 = [i for i in range(1,31) if i%3 == 0] print(l1)
#含有两个‘e’的所有的人名留下来, 多层循环的列表推导式 names = [['tom','fee','faeffa','pelae'],['alice','jill','wendu','jenne']] l1 = [name for i in names for name in i if name.count('e') == 2] print(l1)
range
类似于列表,自定制数字范围的数字列表
r = range(10) #[0,1,2,3,4,5,6,7,8,9] 顾首不顾尾
print(r[1]) #返回 1, 索引
for i in range(1,101):
print(i) #打印1到100
for i in range(2,101,2):
print(i) #控制步长,为2
for i in range(100,0,-1):
print(i) #倒着打印,100到1
for i range(len(le)):
print(i) #利用range将le列表的所有索引依次打印出来