一、Python中的索引:序列[数字] 序列类型的数据类型有字符串,列表元组
索引是分正负的
1、正索引是从左往右数,从零开始
str1='asdfghjkl'
print(str1[0]) #获取str1中的索引位为0(顺数第1位)的值:a
print(str1[5]) #获取str1中的索引位为5(顺数第6位)的值:h
print(str1[9]) #因为str1中最大的索引位只有8,所以执行报错,报错:索引越界(string index out of range)
2、负索引是从右往左数,从-1开始
print(str1[-1]) #获取str1中的索引位为-1(倒数第1位)的值:l
print(str1[-6]) #获取str1中的索引位为-6(倒数第6位)的值:f
print(str1[-9]) #获取str1中的索引位为-9(倒数第9位)的值:a
print(str1[-10]) #报错:索引越界(string index out of range)
二、Python中的切片操作
1、切片是建立在索引的基础上。所以支持的数据类型也是:字符串、列表以及元组
2、切片的表达式为:序列[开始索引:结束索引:步长值n]即[start_index:end_index:step]n=1、2、3....n(n不能为0)
3、切片也分正负,是通过步长值进行控制,正步长从左往右取,负步长从右往左取
4、切片取开始索引至结束索引之前的值,但是是不取结束索引的值
5、步长不写的情况,默认值为1
6、开始索引不写的情况下,是从两头开始取起,到底取哪头,就看步长是正还是负
7、步长为1则挨个取,步长为2则隔一个取一个,步长为3则隔两个取一个,依次类推......
str1='asdfghjkl'
print(str1[1:2]) #对str1进行切片,截取索引位为1到索引位为2的值,不取结束索引,结果为:s
print(str1[0:5]) #对str1进行切片,截取索引位为0到索引位为5的值,不取结束索引,结果为:asdfg
print(str1[0:9:-1]) #没有结果,因为开始索引是0,结束索引是5,开始到结束本身就是从左往右,
#但是步长为-1,取值则从右往左,无法取值,所以执行无数据
print(str1[5:0:-1]) #对str1进行切片,截取索引位为5到索引位为0的值,通过负步长进行,不取结束索引,结果为:hgfds
print(str1[:2:-1]) #截取直接从末尾开始,结束索引位2的值,通过负步长进行,不取结束索引,结果为:lkjhgf
print(str1[:2:1]) #从开头开始截取到结束索引位2的值,通过正步长进行,不取结束索引,结果为:as
print(str1[0:8:2]) #截取索引位为0到索引位为8的值,通过步长为2进行截取,不取结束索引,结果为:adgj
print(str1[:8:3]) #从开头开始截取到结束索引位8的值,通过正步长3进行,不取结束索引,结果为:adj
print(str1[::2]) #不写开始和结束索引,就不存在结束索引不取的情况,通过正步长2进行(从开头取起),每隔1个取1个,结果为:adgjl
print(str1[-2:-9:1]) #结果为空,开始和结束索引的顺序是从右往左,但是步长却是从左往右,所以为空
print(str1[1:8:-1]) #结果为空,开始和结束索引的顺序是从左往右,但是步长却是从右往左,所以为空
print(str1[-3::]) #从开始索引-3开始取值,通过默认步长1,正步长从左往右取值 结果为:jkl
print(str1[-3::-1]) #从开始索引-3开始取值,通过负步长-1,从右往左取值,结果为:jhgfdsa
print(str1[::]) #不写开始和结束索引,就不存在结束索引不取的情况,通过默认步长1进行取值,结果为:asdfghjkl
print(str1[::-1]) #反转输出,通过切片设置步长为-1进行切片取值 结果为:lkjhgfdsa =====》面试题
三、Python中的字符串:字符串的定义是通过单引号或者双引号括起来表示
str1='asdfghjkl'
str2='qwert'
a=1
print(type(str1)) #<class 'str'>
print(type(str2)) #<class 'str'>
print(type(a)) #<class 'int'>
Python中字符串常用的函数
1、capitalize 首字母大写
a、首字符会转换为大写,其他字符转换为小写
str1='DUOceshi'
print(str1.capitalize()) #Duoceshi
如果首字符非字母,首字符不会转换大写,后面所有字母都会转换为小写
str2='1DUOCeShi'
print(str2.capitalize()) #1duoceshi
2、title 首字母大写的第二种方式,标题化
会把非字母后的第一个字母转换为大写
str3='DUO ce shi'
str4='1DUO_Ce_Shi'
print(str3.title())
print(str4.title())
3、count 统计字符串中指定字符出现的次数
str3='DUO ce shi'
str4='1DUO_Ce_Shi'
print(str3.count('D')) #结果为1
print(str4.count('_')) #结果为2
print(str4.count('_',5,8)) #count函数结合着切片的方式进行统计指定字符的出现次数,结果为1
4、join 拼接函数
str3='DUO ce shi'
str4='1DUO_Ce_Shi'
print('@'.join(str3)) #结果为:D@U@O@ @c@e@ @s@h@i
print(str4.join(str3))
list1=['1','2','3']
print(''.join(list1)) #通过一个空字符,使用join函数对list1中的字符元素进行拼接,结果为:123
5、split 分隔函数
str1='asdfasdfasdf'
print(str1.split('s')) #对str1字符串中的s进行分隔,得出一个列表['a', 'dfa', 'dfa', 'df']
print(str1.split('s',1)) #对str1字符串中的s进行分隔,只能分隔一次,结果为['a', 'dfasdfasdf']
6、strip 删除某个字符串开头和结尾的指定字符的函数
str1='absadfa'
print(str1.strip('a')) #删除字符串中开头和结尾的a字符
print(str1.strip('ab')) #删除字符串中开头和结尾的a或b字符
7、lstrip 删除某个字符串开头的指定字符函数
str1='absadfba'
print(str1.lstrip('bas')) #删除字符串中开头的bas字符
8、rstrip 删除某个字符串结尾的指定字符函数
print(str1.rstrip('a')) #删除字符串中结尾的a字符
9、startswith 判断字符串是否以指定字符开头,返回布尔值
str1='Dbsadfba'
print(str1.startswith('a')) #判断str1字符串是否以a开头
print(str1.startswith('ba')) #判断str1字符串是否以D开头
10、endswith 判断字符串是否以指定字符结尾,返回布尔值
str1='Dbsadfba'
print(str1.endswith('a')) #判断str1字符串是否以a结尾
print(str1.endswith('ab')) #判断str1字符串是否以ab结尾
需求:判断上传的文件是否是xls文件
file_name=input('请上传xls文件:')
if file_name.endswith('.xls'):
print('文件上传正确')
else:
print('文件上传失败')
11、find 查找字符串中指定字符的索引位,从左往右搜索
如果查找的指定字符不存在,则返回-1
str1='absadfba'
print(str1.find('a')) #查找str1中第一个a字符的索引位
print(str1.find('a',2,-1)) #查找str1中指定范围(从索引位2到索引位-1)的第一个a字符的索引位
print(str1.find('x')) #查找str1中x字符的索引位,因为str1中的字符串没有x,所以返回结果:-1
index函数和find函数作用一样,不过如果字符串中不存在指定字符则报错
print(str1.index('a',2,-1)) #查找str1中指定范围(从索引位2到索引位-1)的第一个a字符的索引位
print(str1.index('x')) #报错,字符串不存在x字符
12、rfind 查找字符串中指定字符的索引位,从右往左搜索
str1='absadfba'
print(str1.rfind('a'))
print(str1.rfind('a',0,6))
print(str1.rfind('x'))
13、 replace 替换函数
语法(原值,新值,替换次数)
str1='absadfba'
print(str1.replace('a','O')) #如果不写替换次数,默认全部替换
print(str1.replace('a','U',1)) #写了替换次数,从左往右进行替换对应次数
14、upper 小写字母改为大写
str1='absadF1@ba'
print(str1.upper()) #把str1中的小写字母全部更改为大写
15、lower 大写字母改为小写字母
str1='absadF1@ba'
print(str1.lower()) #把str1中的大写字母全部更改为小写
16、isupper 判断字符串中的字母是否全为大写字母,返回的是布尔值
str1='absadF1@ba'
str2='ASDF1'
print(str1.isupper()) #因为str1里面包含小写的字母,所以返回False
print(str2.isupper()) #str2中的字母字符都是大写的,所以返回True
17、islower 判断字符串中的字母是否全为小写字母,返回的是布尔值
str1='absadF1@ba'
str2='asdf1'
print(str1.islower()) #因为str1里面包含大写的字母,所以返回False
print(str2.islower()) #str2中的字母字符都是小写的,所以返回True
18、isalnum 判断字符串是否以字母或数字组合,返回布尔值
str1='absadF1@ba'
print(str1.isalnum()) #因为str1中包含@符,所以返回False
str2='123'
str3='asdf'
str4='asdf1234'
print(str2.isalnum()) #因为str2纯数字,返回True
print(str3.isalnum()) #因为str3纯字母,返回True
print(str4.isalnum()) #因为str4只包含字母数字,返回True
19、isdigit 判断字符串是否以数字组合,返回布尔值
str2='123'
str4='asdf1234'
print(str2.isdigit()) #True
print(str4.isdigit()) #False
20、len 返回长度()
str4='asdf1234'
print(len(str4)) #str4字符串中包含8个字符,返回结果:8
list1=[1,2,'abc']
print(len(list1)) #因为list1中包含三个元素,所以结果返回:3
21、istitle 判断字符串是否标题化,判断非字母后的第一个字母是否为大写,
如果字符串中字母后面接大写字母则返回False
str1='Asdf Ghjk'
print(str1.istitle())
四、Python中的列表(list)
列表的两种定义方法
方法一:直接通过[]进行定义
list1=[1,2,3,4]
print(type(list1))
方法二:通过list()方法进行定义列表,但是写入的值只能是可迭代对象(字符串、元组、列表),不能直接写入数值、字典等对象
list2=list('1234')
print(list2) #['1', '2', '3', '4']
print(list2[0]) #列表的索引操作
print(list2[::-1]) #列表的切片操作
print(len(list2)) #列表字符串统计
二维数组:在列表中包含列表的函数
list1=[1,2,3,['a','b','c']]
print(list1[3]) #如果索引获取list1中的索引位3的列表元素:['a', 'b', 'c']
print(list1[3][1]) #把获取到list1中的列表元素再次进行索引操作,获得二维数组中的具体元素:b
通过索引的方式去替换列表中的元素
list1=[1,2,3,['a','b','c']]
list1[3]='dcs' #把list1中的索引位3的元素替换为‘dcs’
print(list1) #结果为:[1, 2, 3, 'dcs']
通过切片的方式取替换列表中的元素
list1=[1,2,3,['a','b','c']]
list1[3:]='dcs' #把list1中索引位3开始的元素进行替换,但是通过切片的操作时,赋值会被拆分元素,并添加到列表中
print(list1) #结果为:[1, 2, 3, 'd', 'c', 's']
列表中常用函数
1、append 添加,默认添加到列表的末尾
l1=[1,2,3,4]
l1.append('gz')
print(l1)
2、extend 拼接列表
l1=[1,2,3,4]
l2=['a','b','c']
l1.extend(l2) #在l1列表对l2列表进行拼接操作,不会对l2列表发生改变
print(l1) #结果:[1, 2, 3, 4, 'a', 'b', 'c']
print(l2) #l2未发生改变,结果:['a', 'b', 'c']
3、insert 插入值,根据索引值进行插入
l1=[1,2,3,4]
l1.insert(2,'dcs')
print(l1)
l1.insert(50,'a') #插入值时超出索引位,则默认添加在列表的末尾
print(l1)
4、remove 删除列表中的元素
当列表中出现多个相同的元素则从左往右删除第一个
l1=[1,2,3,4,3,3,3,3]
l1.remove(3)
print(l1)
l1.remove('a') #当删除一个列表中不存在的元素则会报错ValueError: list.remove(x): x not in list
print(l1)
l1.remove(l1[0]) #通过获取列表中对应索引的值进行remove删除
print(l1)
5、del Python中的删除作用保留关键字
l1=[1,2,3,4,3,3,3,3]
del l1[2] #结果为:[1, 2, 4, 3, 3, 3, 3]
print(l1)
del l1[10] #报错:索引越界 IndexError: list assignment index out of range
print(l1)
6、index 获取索引位,从左往右搜索匹配到的第一个元素的索引位
l1=[1,2,'abc',3,4,'abc']
print(l1.index('abc')) #从左往右搜索匹配到的第一个元素的索引位
print(l1.index('abc',3)) #从第3个索引位开始匹配检索对应元素的索引位,返回的也是匹配的第一个
7、sort 升序排序,默认是升序,可以通过修改成参数的值进行定义升序或者降序的操作
l1=[4,3,2,6,5]
l1.sort()
print(l1) #[2, 3, 4, 5, 6]
l2=['a','b',9,6,7]
# l2.sort() #执行报错,因为整型不能和字符串进行大小匹配,所以做不了排序查找
l3=['A','a','9','=','%','4','5']
l3.sort() #纯字符也是可以进行排序的,通过ACSⅡ码的规则进行排序
print(l3) #结果:['%', '4', '5', '9', '=', 'A', 'a']
l3.sort(reverse=True) #sort函数的降序操作,增加参数reverse=True
print(l3) #结果为:['a', 'A', '=', '9', '5', '4', '%']
l3.sort(reverse=False) #sort函数的升序操作,增加参数reverse=False
print(l3) #结果为:['%', '4', '5', '9', '=', 'A', 'a']
8、sorted 排序函数
reverse=True是降序,reverse=False是升序
l3=['A','a','9','=','%','4','5']
print(sorted(l3,reverse=True)) #['a', 'A', '=', '9', '5', '4', '%']
print(sorted(l3,reverse=False)) #['%', '4', '5', '9', '=', 'A', 'a']
区别:sort函数是list类里面的方法,sorted函数不仅仅对列表器起作用,还可以对其他可迭代的对象起作用
例如:
str1='FHGHJKJffhjHg%#'
print(sorted(str1)) #结果:['#', '%', 'F', 'G', 'H', 'H', 'H', 'J', 'J', 'K', 'f', 'f', 'g', 'h', 'j']
print(sort(str1)) #结果:报错,NameError: name 'sort' is not defined
9、reverse 反转输出
面试题:说一下怎么对一个列表进行反转输出?
方法一:通过切片的方式,设置步长为-1
l3=['A','a','9','=','%','4','5']
print(l3[::-1]) #结果为:['5', '4', '%', '=', '9', 'a', 'A']
方法二:通过列表的自带函数reverse进行反转输出
l3.reverse()
print(l3) #结果为:['5', '4', '%', '=', '9', 'a', 'A']
10、pop函数
a.默认移除列表最后一个元素,并返回元素的值
b.移除指定位置的元素list1.pop(0)表示移除第一个元素
c.在列表中pop函数是唯一一个既能改变列表元素又有返回值
l1=['A','a','9','=','%','4','5']
print(l1.pop()) #可以通过pop函数获取被移除的值:5
print(l1) #被移除之后的结果:['A', 'a', '9', '=', '%', '4']
print(l1.pop(2)) #pop通过索引的方式对列表进行操作
print(l1)
11、count 函数,统计列表中元素出现的次数
l1=['A','a','9','=','%','4','5','=']
print(l1.count('='))
12、clear 清除函数,清空列表
l1=['A','a','9','=','%','4','5','=']
l1.clear()
print(l1) #结果:[] 空列表
max和min函数,获取最大和最小值
l1=[4,3,6,2,5]
print(max(l1)) #结果为:6
print(min(l1)) #结果为:2
l3=['A','a','9','=','%','4','5'] #字符串的最大值最小值也是通过ACSⅡ码的规则进行排序
print(max(l3)) #结果为:a
print(min(l3)) #结果为:%
str1='FHGHJKJffhjHg%#'
print(max(str1),min(str1)) #结果为:j #
五、Python中的元组(tuple)
定义元组:通过一对()进行定义
tup=('a',1,3,4)
print(type(tup)) #<class 'tuple'>
t=(1,) #当元组中只有一个值的时候,后面要加逗号
print(type(t))
元组的常见操作
1、对元组转换为列表
tup=('a',1,3,4)
l1=list(tup)
print(l1,type(l1)) #['a', 1, 3, 4] <class 'list'>
2、对列表转换为元组的操作
l1=['a', 1, 3, 4]
tup1=tuple(l1)
print(tup1,type(tup1)) #('a', 1, 3, 4) <class 'tuple'>
3、对元组进行修改
tup=('a',1,3,4)
tup.insert(0,'d') #报错,因为不能直接对元组进行修改
面试题:如何对Python中的元组进行修改?
我们可以通过把元组转换为列表的方式进行修改,修改完后再转换为元组
l1=['a', 1, 3, 4]
tup=('a',1,3,4)
l1=list(tup) #先对元组tup转换为列表l1
l1.insert(0,'d') #对l1进行数据输入
tup=tuple(l1) #对修改后的l1列表转换为元组tup
print(tup)
面试题:元组和列表的区别
相同:
a、都是序列类型的容器对象,可以存放任何类型的数据
b、支持切片、迭代等操作
不同:
a、list 是可变的对象,元组tuple是不可变的对象
b、tuple不可变,所以使用tuple可以使代码更安全
面试题:
1、元组中的元素可以修改吗?
不可以,如果一定要修改,可以通过间接的方法修改,先把元组转换为列表进行修改,修改完后再转换成元组
2、元组和列表对比,哪个的数据处理速度更快?
元组更快,因为固定值比可变值要快
如果元组中存在列表元素,name里面列表元素是可变的
通过索引的方式去改变元组中的列表中的元素
tup=(1,2,3,['a','b','c'])
print(tup[3]) #['a', 'b', 'c']
tup[3][0]='AA' #二维数组的方式改变元组中的列表中的值
print(tup)
|
|