06.字符串、列表
01.字符串编码
02.字符串常见操作
03.列表
04.列表的相关操作
01.字符串编码
字符串编码,本质上就是二进制数据与语言文字的一一对应关系
1.2 Unicode
Unicode:所有字符都是2个字节。
好处:字符与数字之间转换速度更快一些。
坏处:占用空间大
1.3 UTF-8
UTF-8:精准,对不同的字符用不同的长度表示
优点:节省空间
缺点:字符与数字的转换速度较慢,每次都需要计算字符要用多少个字节来表示。
1.4 字符串编码转换
1.编码 encode()
将其他编码的字符串转换成Unicode编码。
2.解码 decode()
将Unicode编码转换成其他编码的字符串。
a = 'hello'
print(a,type(a)) #str,字符串是以字符为单位进行处理
a = 'hello'
print(a,type(a)) #str,字符串是以字符为单位进行处理
a1 = a.encode() #编码
print("编码后:",a1)
print(type(a1)) #bytes,以字节为单位进行处理的
a2 = a.decode() #解码
print(a2,type(a2))
#注意:对于bytes,只需要知道它跟字符串类型之间的相互转换
st = "这里是六星"
st1 = st.encode(""utf-8)
print(st1,type(st1))
st2 = st1.decode("utf-8")
print(st2,type(st2))
02.字符串常见操作
字符串运算符
2.1 + 字符串拼接
print(10 + 10) #20,整型相加,+是算数运算符
print("10" + "10") #1010,字符串相加,+是字符串拼接
name1 = "星星"
name2 = "点灯"
print(name1 + name2)
print(name1 , name2)
print(name1 , name2,sep = "")
2.2 * 重复输出
print("好好学习,天天向上\n"*5)
#注意:需要输出多少次,*后面就写多少
2.2 成员运算符
作用:检查字符串中是否包含了某个子字符串(即某个字符或多个字符)
in: 如果包含的话,返回True,不包含返回Flase
not in :如果不包含的话,返回True,包含返回Flase
name = "bingbing"
print('b' in name)
print('a' in name)
print('b' not in name)
print('a' not in name)
print('bin' in name)
print('binb' in name)
name = "冰冰"
print('six' in name)
print('冰冰' in name)
print('冰水' in name)
print('冰水' not in name)
2.3 下标
下标/索引
作用:通过下标能够快速找到对应的数据
Python中下标从0开始
写法:字符串名[下标值]
注意:从右往左数,下标是从-1开始,-1,-2,-3…
name = "abcdefg"
#从左往右数,下标从0开始
print(name[0])
print(name[1])
print(name[2])
print(name[3])
print(name[4])
print(name[5])
print(name[6])
name = "abcdefg"
#从左往右数,下标从0开始
print(name[0])
print(name[1])
print(name[2])
print(name[3])
print(name[4])
print(name[5])
print(name[6])
print(name[7]) #报错,取值的时候不要超出下标范围
name = "abcdefg"
#从左往右数,下标从0开始
# print(name[0])
# print(name[1])
# print(name[2])
# print(name[3])
# print(name[4])
# print(name[5])
# print(name[6])
# print(name[7]) #报错,取值的时候不要超出下标范围
#从右往左数,下标是从-1开始,-1,-2,-3...
print(name[-1])
print(name[-2])
print(name[-3])
print(name[-4])
print(name[-5])
print(name[-6])
print(name[-7])
print(name[-8]) #报错,超出范围
2.4 切片
切片:指对操作的对象截取其中一部分的操作
语法:[起始位置:结束位置:步长]
包前不包后原则 即从起始位置开始,到结束位置的前一位结束(不包括结束位置本身)
步长表示选取间隔,不写步长则默认是1
步长的绝对值大小决定切取数据间隔,正负号决定切取方向。
str = "abcdefghijk"
#从左往右
print(str[0:4])
print(str[3:]) # 下标为3之后的全部截取到
print(str[:7]) # 下标为7之前的全部截取到,不包含7
str = "abcdefghijk"
#从左往右
print(str[0:4])
print(str[3:]) # 下标为3之后的全部截取到
print(str[:7]) # 下标为7之前的全部截取到,不包含7
#从右往左
print(str[-1:]) #k
print(str[:-1]) #abcdefghij
print(str[-1:-5]) #
#步长:表示选取间隔,不写步长则默认是1,正负号决定切取方向。
#正数表示从左往右取值,负数表示从右往左取值。
print(str[-1::-1]) #kjihgfedcba 从右往左取值
print(str[-1:-5:-1]) #kjih
print(str[0:7:2]) #aceg
print(str[0:7:3]) #adg
3.字符串常见操作
3.1查找
1.find
find:检测某个子字符串是否包含在字符串中,如果在就返回这个字符串开始位置的下标,否则就返回-1
find(子字符串,开始位置下标,结束位置下标)
注意:开始和结束位置下标可以省略,表示在整个字符串中查找
name = 'bingbing'
print(name.find('i')) #1 ---第一个i的下标为1
print(name.find('bing')) #0 ---检测到第一个bing,b的下标为0
print(name.find('b',3)) #4
print(name.find('b',5)) # -1 超出范围,不包含返回-1
print(name.find('b',3,5)) # 4在下标3-5位置范围内查找
#包前不包后
print(name.find('b',3,4)) #-1
3.2.index()
index():检测某个子字符串是否包含在字符串中,如果在就返回这个字符串开始位置的下标,否则就会报错
index(子字符串,开始位置下标,结束位置下标)
注意:开始和结束位置下标可以省略,表示在整个字符串中查找
name = '天生我才必有用'
print(name.index('生')) #1
# print(name.index('生',2)) #报错,从下标2开始找,没有找到
print(name.index('生',1,3)) #1
#同样遵循包前不包后原则
#和find的区别:find没找到,返回-1;index没找到就会报错
3.count()
count():返回某个字符串在整个字符串中出现的次数,没有就返回0
count(子字符串,开始位置下标,结束位置下标)
注意:开始和结束位置下标可以省略,表示在整个字符串中查找
name = 'bingbing'
print(name.count('a'))
print(name.count('b'))
print(name.count('b',1))
print(name.count('b',1,3))
print(name.count('b',1,4))
print(name.count('b',1,5)) #包前不包后
3.3判断
1.startwith()
starwith():是否以某个子字符串开头,是的话返回True,不是的话返回Flase,如果设置开始和结束位置,则在指定范围内检查
starwith(子字符串,开始位置下标,结束位置下标)
st = 'bIngBinG'
print(st.startswith('b'))
print(st.startswith('a'))
print(st.startswith('b',0,1))
print(st.startswith('b',3,6))
2.endswith()
endswith():是否以某个子字符串结尾,是的话返回True,不是的话返回Flase,如果设置开始和结束位置,则在指定范围内检查
endswith(子字符串,开始位置下标,结束位置下标)
st = 'bIngBinG'
print(st.endswith('b'))
print(st.endswith('G'))
print(st.endswith('b',0,1))
print(st.endswith('G',3,7))
print(st.endswith('G',3,8))
3.isupper()
isupper():检测字符串中所有的字母是否都为大写,是的话返回True
3.2 修改元素
1.replace()
replace():替换
replace(旧内容,新内容,替换次数)
注意:替换次数可以省略,默认全部替换
name = '好好学习,天天向上'
print(name.replace('天','日'))
print(name.replace('天','日',1))
2.split()
split():指定分隔符来切字符串
name = '好好学习,天天向上'
print(name.split(',')) #以列表的形式返回
#如果字符串中不包含分割内容,旧不进行分割,会作为一个整体
print(name.split(',')) #以列表的形式返回
print(name.split(':'))
print(name.split('天'))
print(name.split('天',1)) #指定只分割一次
3.capitalize()
capitalize():第一个字符大写,其他都小写
name = 'bingbing'
print(name.capitalize())
4.lower()
lower():大写字母转为小写
5.upper()
upper():小写字母转为大写
st = 'bIngBinG'
print(st.lower())
print(st.upper())
03.列表
1.定义
是处理一组有序项目的数据结构。
2.格式
列表名 = [元素1,元素2,元素3,元素4…]
注意:
(1)列表的所有元素放在一对中括号[]中,并使用逗号分隔开。
(2)一个列表中的数据类型可以各不相同。
li = [1,2,'a',4]
print(li,type(li))
#列表也可以进行切片操作
print(li[0:3])
#列表是可迭代对象,可以for循环遍历取值
for i in li:
print(i)
04.列表的相关操作
4.1.添加元素
append() extend() insert()
li = ['one','two','three']
# li.append('four') #append整体添加 ['one', 'two', 'three', 'four']
# li.extend('four') #extend分散添加,将另外一个类型中的元素逐一添加 ['one', 'two', 'three', 'f', 'o', 'u', 'r']
# li.insert(3, "four") #在指定位置插入元素 ['one', 'two', 'three', 'four']
# li.insert(0, "four") #指定位置如果有元素,原有元素就会后移 ['four', 'one', 'two', 'three']
# li.insert("four") #报错,没有指定下标
print(li)
li = [1,2,3]
# li.append(4) #append整体添加 [1, 2, 3, 4]
# li.extend(4) #报错 'int' object is not iterable
# li.insert(3, 4) #在指定位置插入元素 [1, 2, 3, 4]
# li.insert(0, "four") #['four', 1, 2, 3]
print(li)
4.2.修改元素
直接通过下标就可以进行修改
li = [1,2,3]
li[1] = 'a' #[1, 'a', 3]
print(li)
4.3.查找元素
in:判断指定元素是否存在列表中,如果存在就返回True,不存在就返回False
not in:判断指定元素是否存在列表中,如果不存在就返回True,存在就返回False
li = ['a','b','c','d']
print('a' in li)
print('a' not in li)
print('e' in li)
name_list = ['bingbing','susu','ziyi']
name = input('请输入您的昵称')
#判断昵称是否已经存在
if name in name_list:
print(f'您输入的昵称{name}已经存在')
#如果昵称不存在
else:
print(f'昵称{name}已经被使用,昵称不存在')
#把昵称新增到列表
name_list.append(name)
print(name_list)
name_list = ['bingbing','susu','ziyi']
while True:
name = input('请输入您的昵称')
#判断昵称是否已经存在
if name in name_list:
print(f'您输入的昵称{name}已经存在')
#如果昵称不存在
else:
print(f'昵称{name}已经被使用,昵称不存在')
#把昵称新增到列表
name_list.append(name)
print(name_list)
break
index:返回指定数据所在位置的下标,如果查找的数据不存在就会报错
count:统计指定数据在当前列表出现的次数
跟字符串中的用法相同
4.4 删除元素
del
li = ['a','b','c','d']
del li #删除列表
print(li) #列表已删除,故报错
li = ['a','b','c','d']
# del li #删除列表
del li[2] #根据下标删除 ['a', 'b', 'd']
print(li)
pop
pop:删除指定下标的数据,python3版本默认删除最后一个元素
li = ['a','b','c','d']
li.pop() #['a', 'b', 'c']
li.pop(2) #不能指定元素删除,只能根据下标进行删除,下标不能超出范围 ['a', 'b']
print(li)
remove
remove:根据元素的值进行删除
li = ['a','b','c','d','b']
li.remove('a') #['b', 'c', 'd']
li.remove('b') #['c', 'd', 'b'] 默认删除最开始出现的指定元素
print(li)
4.5.排序
sort
sort:将列表按特定顺序重新排列,默认从小到大
li = [1,4,67,3,4,64]
li.sort()
print(li) #[1, 3, 4, 4, 64, 67]
reverse
reverse:倒序,将列表倒置(反过来)
li = [1,4,67,3,4,64]
li.sort()
li.reverse() #[67, 64, 4, 4, 3, 1]
print(li) #[1, 3, 4, 4, 64, 67]
4.6.列表推导式
格式一:[表达式 for 变量 in 列表]
注意:in后面不仅可以放列表,还可以放range()、可迭代对象
li = [1,2,3,4,5,6]
[print(i) for i in li] #前面的i是表达式
li = [1,2,3,4,5,6]
[print(i*10) for i in li] #前面的i是表达式
li = []
for i in range(1,6):
print(i)
li.append(i)
print(li)
li = []
[li.append(i) for i in range(1,6)]
print(li)
格式二:[表达式 for 变量 in 列表 if 条件]
把奇数放进列表
li = []
for i in range(1,11):
if i % 2 == 1:
li.append(i)
print(li)
li2 = []
[li2.append(i) for i in range(1,11) if i % 2 == 1]
print(li2)
li3 = []
[li3.append(i) for i in li3 if i % 2 == 1]
print(li3)
4.7.列表嵌套
含义:一个礼表里面又有一个列表
li = [1,2,3,[4,5,6]] #[4, 5, 6]是里面的列表
print(li[3]) #取出里面的列表 [4, 5, 6]
print(li[3][1]) #取出内列表中的下标为1的元素 5
学习地址:https://www.bilibili.com/video/BV1FS421K7Hs/?p=16&spm_id_from=pageDriver&vd_source=279585e3656eb1829d1f31997be26270