数据类型内置方法(二)
![]()
字符串的其他内置方法
1. strip、rstrip、lstrip方法
作用:
移除字符串首尾指定字符,可以选择方向
eg:
s = '---petter---'
print(s.strip('-'))
print(s.rstrip('-'))
print(s.lstrip('-'))
运行结果:
petter
---petter
petter---
总结:
# strip可以移除字符串首尾的指定字符,括号内为空默认移除空格,rstrip、lstrip移除字符串右边、左边的空格。
2. lower、upper、islower、isupper方法
作用:
lower、upper实现改变大小写
islower、isupper用来判断字符串是否由纯小写或纯大写字母构成
eg:
s = 'PeTter'
print(s.lower())
print(s.upper())
print(s.islower())
print(s.isupper())
运行结果:
petter
PETTER
False
False
总结:
#lower可以将字符串的所有英文字母转换成小写
#upper可以将字符串的所有英文字母转换成大写
#islower可以判断字符串是否由纯小写字母构成,返回True或False
#isupper可以判断字符串是否由纯大写字母构成,返回True或False
拓展:
lower、upper在图片验证码时普遍使用,我们在输入验证码时,明明有大写字母,我们输入纯小写的验证码,也可以验证通过,就是使用了lower或upper方法,将系统生成的验证码和我们输入的验证码先全部转换成大写或小写再比较,就可以了。
![]()
3. startswith、endswith方法
作用:
判断字符串的首尾是否是指定字符
eg:
s = 'petter like drink Pepsi'
print(s.startswith('p'))
print(s.startswith('petter'))
print(s.endswith('i'))
print(s.endswith('da'))
运行结果:
True
True
True
False
总结:
#startswith、endswith方法用来判断字符串首尾是否为指定字符,可以为多个字符,没有默认值,括号内不可以为空
作用:
实现批量操作,格式化输出
eg:
# 方式一:%s占位符
print('name:%s, age:%s,height:%s' % ('petter', 18, 185))
# 方式二:format
# format用法1:和占位符用法一致
print('name:{}, age:{},height:{}'.format('petter', 18, 185))
# format用法2:索引取值法,可以反复使用
print('name:{0}, age:{1},height:{2},{0}{1}岁了'.format('petter', 18, 185))
# format用法3:指名道姓法,也可以反复利用,用法大致和用法2一致
print('name:{name}, age:{age},height:{height},{name}{age}岁了'.format(name='petter', age=18, height=185))
# format用法2,直接使用已定义好的变量(使用较多)
name='petter'
age=18
height=185
print(f'name:{name}, age:{age},height:{height},{name}{age}岁了')
运行结果:
name:petter, age:18,height:185
name:petter, age:18,height:185
name:petter, age:18,height:185,petter18岁了
name:petter, age:18,height:185,petter18岁了
name:petter, age:18,height:185,petter18岁了
总结:
#格式化输出主要是为了大批量的操作更加方便,使用占位符和format方法都可以,官方推荐format方法,重点掌握用法四,更加便捷,更屌,"在使用方法四时,千万不能忘记输出内容前面的f"。其他方法也要了解,避免以后维护项目遇到
![]()
5. join方法
作用:
用于拼接字符串
eg:
s1 = '少壮不努力'
s2 = '老大变垃圾'
print(s1 + ' ' + s2)
print(s1 * 2)
print('|'.join(s2))
运行结果:
少壮不努力 老大变垃圾
少壮不努力少壮不努力
老|大|变|垃|圾
总结:
#我们可以直接使用加号实现把两个字符串连接成一个,使用乘号实现字符串倍增,使用join,实现字符串的每两个字符间插入指定字符
6. replace方法
作用:
替换字符串中的指定字符
eg:
s = 'petter like drink Pepsi,petter,petter'
print(s.replace('petter','oscar'))
print(s.replace('petter','oscar',2))
运行结果:
oscar like drink Pepsi,oscar,oscar
oscar like drink Pepsi,oscar,petter
总结:
#使用replace,可以实现指定字符的替换,括号内第三个参数是从左往右数要替换几个
![]()
7. isdigit方法
作用:
判断字符串是否是纯数字组成
eg:
print('123'.isdigit())
print('11.11'.isdigit())
print('petter'.isdigit())
运行结果:
True
False
False
作用:
#判断字符串是否是纯数字组成,返回True或False,注意,小数返回的也是False,因为小数点是字符
拓展:
在我们需要用户输入数字时,可以使用isdigit方法做出判断,防止用户输入字符或者空输入
![]()
8. 了解的操作
# 1. 查找指定字符的索引值
# s = 'petter like drink Pepsi,petter,petter'
# print(s.find('t')) # 找到一个即输出,不再继续找下去
# >>>2
# print(s.find('t',3,18)) # 控制查找的起止位置
# >>>3
# print(s1.index('t'))
# >>>2
# print(s1.index('t', 3, 18)) # 找不到直接报错 不推荐使用
# >>>3
==========================================================
# 2. 文本位置改变
# name = 'petter'
# print(name.center(30, '-')) # name放在最中间,不够30个字符用'-'补满
# >>>------------petter------------
# print(name.ljust(30, '*')) # name放在最左边,不够30个字符用'*'补满
# >>>petter************************
# print(name.rjust(30, '$')) # name放在最右边,不够30个字符用'$'补满
# >>>$$$$$$$$$$$$$$$$$$$$$$$$petter
# print(name.zfill(50)) # 50个字符,不够在name前面用0补满
# >>>00000000000000000000000000000000000000000000petter
==========================================================
# 3. 特殊符号:斜杠与一些英文字母的组合会产生特殊的含义
# print('ja\tson\nke\avin')
# >>>ja son
# >>>kevin
'''如果想取消它们的特殊含义 可以在字符串的前面加一个字母r'''
# print(r'ja\tson\nke\avin')
# >>>ja\tson\nke\avin
==========================================================
# 4.capitalize,swapcase,title(其他的大小写操作)
# 4.1 capitalize:字符串首字母大写
# s = 'petter like drink Pepsi'
# print(s.capitalize())
# >>>Petter like drink pepsi
# 4.2 swapcase:大小写反转
# s = 'PetTer'
# print(s.swapcase())
# >>>pETtER
# 4.3 titli:首字母大写
# s = 'petter like drink Pepsi'
# print(s.title())
# >>>Petter Like Drink Pepsi
![]()
列表的内置方法
1. 类型转换
作用:
将其他类型数据转换列表
eg:
print(list('petter'))
print(list({'name': 'petter', 'age': 18}))
print(list((11,22,33,44,55)))
print(list({11,22,33,44,55}))
运行结果:
['p', 'e', 't', 't', 'e', 'r']
['name', 'age']
[11, 22, 33, 44, 55]
[33, 11, 44, 22, 55]
总结:
# 能转换成列表的数据类型有字符串、字典、元组、集合,字符串转换是将每个字符转换成列表的每个元素,字典转换是将每个键值对的key转换成列表的每个元素,元组与集合都是自身元素转换成列表元素,除了以上四种数据类型和列表本身,其他数据类型在转换时都会报错
2. 常见操作
name_list = ['jason', 'kevin', 'tony', 'tom', 'jerry']
# 1. 索引取值
# print(name_list[0])
# >>>jason
# print(name_list[-1])
# >>>jerry
==========================================================
# 2. 切片操作
# print(name_list[2:4])
# >>>['tony', 'tom']
# print(name_list[-4:-2])
# >>>['kevin', 'tony']
# print(name_list[-4:-2:2]) #[起始位置:结束位置:步长]
# >>>['kevin']
==========================================================
# 3. 统计列表中元素的个数
# print(len(name_list))
# >>>5
==========================================================
# 4. 成员运算 判断单位最小是元素而不是字符
# print('j' in name_list)
# >>>False
# print('jason' in name_list)
# >>>True
==========================================================
# 5. 向列表中添加元素
# 5.1 列表后添加单个元素
# name_list.append('petter')
# print(name_list)
# >>>['jason', 'kevin', 'tony', 'tom', 'jerry', 'petter']
# name_list.append(['petter','oscar'])
# print(name_list)
# >>>['jason', 'kevin', 'tony', 'tom', 'jerry', ['petter', 'oscar']]
----------------------------------------------------------
# 5.2 指定位置插入单个元素
# name_list.insert(3,'petter')
# print(name_list)
# >>>['jason', 'kevin', 'tony', 'petter', 'tom', 'jerry']
# name_list.insert(2,['petter','oscar'])
# print(name_list)
# >>>['jason', 'kevin', ['petter', 'oscar'], 'tony', 'tom', 'jerry']
----------------------------------------------------------
# 5.3 合并列表 把一个列表接到另一个列表后面
# name_list.extend([11,22,33,44])
# print(name_list)
# >>>['jason', 'kevin', 'tony', 'tom', 'jerry', 11, 22, 33, 44]
'''extend其实可以看成是for循环+append'''
# for i in [11,22,33,44]:
# name_list.append(i)
# print(name_list)
# name_list += [11,22,33,44]
# print(name_list) # 加号的效率不高,占用内存更大,不建议使用
# >>>['jason', 'kevin', 'tony', 'tom', 'jerry', 11, 22, 33, 44]
==========================================================
# 6. 删除元素
# 6.1 通用的删除方式
# del name_list[0] # 根据索引删除
# print(name_list)
# >>>['kevin', 'tony', 'tom', 'jerry']
----------------------------------------------------------
# 6.2 指名道姓删除
# name_list.remove('tom')
# print(name_list)
# >>>['jason', 'kevin', 'tony', 'jerry']
----------------------------------------------------------
# 6.3 延迟删除
# print(name_list.pop()) #弹出尾部第一个元素
# print(name_list)
# >>>jerry
# >>>['jason', 'kevin', 'tony', 'tom']
# print(name_list.pop(2)) #指定索引弹出
# print(name_list)
# >>>tony
# >>>['jason', 'kevin', 'tom']
==========================================================
# 7. 修改列表元素
# name_list[0] = 'oscar'
# print(name_list)
# >>>['oscar', 'kevin', 'tony', 'tom', 'jerry']
==========================================================
# 8. 排序
# s = [5,9,6,4,3,8,2,1]
# s.sort() #从小到大,升序
# print(s)
# >>>[1, 2, 3, 4, 5, 6, 8, 9]
# s.sort(reverse=True) # 从大到小,降序
# print(s)
# >>>[9, 8, 6, 5, 4, 3, 2, 1]
==========================================================
# 9.反转
# s.reverse()
# print(s)
# >>>[1, 2, 8, 3, 4, 6, 9, 5]
==========================================================
# 10. 比较运算
# s1 = [4,5,8]
# print(s > s1)
# >>>True
"""列表在做比较的时候 其实比的是对应索引位置上的元素"""
"""列表内的值是字符串时,比较的是他们对应的ASCLL码"""
==========================================================
# 11. 统计列表中某个元素出现的次数
# s = [1,5,3,4,2,1,6,1,5,4,1,8,5]
# print(s.count(1)) # 统计1出现的次数
# >>>4
==========================================================
# 12. 清空列表
# s.clear()
# print(s)
# >>>[]
![]()
可变类型与不可变类型
定义:
"""
可变类型与不可变类型
可变类型 列表
值改变 内存地址不变 修改的是本身
不可变类型 字符串
值改变 内存地址肯定变 修改过程产生了新的值
如何查看变量的'内存地址'
"""
eg:
s1 = '$$$jason$$$'
print(s1.strip('$')) # jason 本身并没有修改 是产生了新的结果
print(s1) # $$$jason$$$
s2 = [1, 2, 3]
print(s2.extend([11, 22, 33, 44, 55])) # None 空
print(s2) # [1, 2, 3, 11, 22, 33, 44, 55]
运行结果:
jason
$$$jason$$$
None
[1, 2, 3, 11, 22, 33, 44, 55]
'''
我们可以通过查看方法的底层代码判断是可变类型还是不可变类型,pycharm中按住ctrl键点击方法名就可以看到底层代码,return就代表有返回值,是不可变类型,需要一个变量名来接收改变后的值,pass代表无返回值,是可变类型,无需接收改变后的值
'''
![]()
![]()
队列与堆栈
定义:
先进先出的数据集就是队列
eg:
排队结账,先排队的先完成结账先离开超市
先进后出的数据集就是堆栈
eg:
公路前方塌方了,要往回倒车,开在前面的最后倒出来,最后的反而先倒出来
# 使用列表模拟队列和堆栈
# 1. 队列
eg:
# 1.定义空列表
list1 = []
# 2.向列表填充数据,先进
for i in range(3):
list1.append(i)
print(list1)
# 3.先出
print('开始出列表了')
print(list1)
for i in range(len(list1)):
list1.pop(0)
print(list1)
运行结果:
[0]
[0, 1]
[0, 1, 2]
开始出列表了
[0, 1, 2]
[1, 2]
[2]
[] # 先进先出
# 2. 堆栈
eg:
# 1.定义空列表
list2 = []
# 2.向列表填充数据,先进
for i in range(3):
list2.append(i)
print(list2)
# 3.出列表
print('开始出列表了')
print(list2)
for i in range(len(list2)):
list2.pop()
print(list2)
运行结果:
[0]
[0, 1]
[0, 1, 2]
开始出列表了
[0, 1, 2]
[0, 1]
[0]
[] # 先进后出
![]()