数据类型内置方法、可变与不可变
今日内容回顾
目录
😏* 数据类型的内置方法之理论
数据类型的内置方法就是数据类型本身的一系列操作方法 而内置方法就是其中占比最多的(自带的功能)
# 快速查看数据的方法有 句点符(.)
# 查看方法的底层源码 ctrl+鼠标左键
😏 * 整型的内置方法与操作
1、类型转换
# 将其他数据类型转成整型
int(其他数据类型)
res = '123'
res = int(res) # int在做类型转换的时候 只能转换纯数字
print(type(res)) # int
print(int('12.5')) # 报错 不识别小数点
print(int(12.5)) # 12 不看小数点以后的数
int('jason123') # 报错 不识别除数字以外的数据
PS:浮点型可以直接转 字符串必须满足内部是纯数值才可以
2、进制数转换
十进制数转其他进制
print(bin(100)) # 将十进制的100转换成二进制 0b1100100
print(oct(100)) # 将十进制的100转换为八进制 0o144
print(hex(100)) # 将十进制的100转换为十六进制 0x64
# 数字开头如果是以0b则为二进制 0o则为八进制 0x则为十六进制
其他进制转十进制
print(int(0b1100100)) # 100
print(int(0o144)) # 100
print(int(0x64)) # 100
print(int('0b1100100', 2))
print(int('0o144', 8))
print(int('0x64',16))
3、Python的精确度低
python自身对数字的敏感度较低 如果需要准确的计算需要借助与模块的numpy......
l1 = 1.1
l2 = 1
print(l1 - l2) # 0.10000000000000009
😏 * 浮点型的内置操作
1、类型转换
float(其他数据类型)
print(float('123')) # 123.0
print(float('11.5')) # 11.5
print(float('12.5jason')) # 报错
print(float('11.5.4.4')) # 报错
字符串里可以允许出现一个小数点 其他必须是纯数字
2、python的精确度低
python自身对数字的敏感度较低 如果需要准确的计算需要借助与模块的numpy......
l1 = 1.1
l2 = 1
print(l1 - l2) # 0.10000000000000009
😏 * 字符串的内置操作
1、类型转换
str(任意数据类型)
print(str(123))
print(str(1.23))
print(str([1, 2, 3, 4])
print(str{'name': 'jason', 'pwd': 123})
print(str(1, 2, 3))
print(str(True))
print(str({1, 2, 3, 4}))
2、需要掌握的方法
1、索引取值
# 起始位置0开始 超出范围直接报错
res = 'hello world' 字符串里的空格也是字符
print(res[0]) # h
print(res[-1]) # d
2、切片操作
print(res[1:5]) # ello 顾头不顾尾 从索引1开始切取到索引4
print(res[-1:-5]) # 不执行 默认位置是从左往右开始取
print(res[-5:-1]) # worl 顾头不顾尾 默认位置从左往右开始取
3、修改切片方向(间隔)
print(res[1:5:1]) # ello 默认是1
print(res[1:5:2]) # el 间隔是1
print(res[-1:-5:-1]) # dlro 更改了方向
print(res[:]) # 不写数字就默认都要
print(res[2:]) # llo world 从索引2开始往后都要
print(res[:5]) # hello 从索引0开始往后要到索引4
print(res[::2]) # hlowrd 间隔是1
4、统计字符串中字符的个数
print(len(res)) # 11
5、移除字符串首位指定的字符
user = input('请输入用户名>>>:').strip()
if user == 'jason':
print('登入成功')
l1 = ' jason '
print(len(l1)) # 9
print(len(res.strip())) # 括号内不写 默认移除首位的空格
l2 = '$$$jason$$$'
print(l2.strip('$')) # jason
print(l2.lstrip('$')) # jason$$$ 移除左边的
print(l2.rstrip('$')) # $$$jason 移除右边的
6、切割字符串指定的字符
res = 'jaosn|123|read'
print(res.split('l')) # ['jason', 123, 'read'] 该方法处理出来的是一个列表
print(res.split('|', maxsplit=1)) # ['jason','123|read'] 从左往右切指定的个数
print(res.rsplit('|', maxsplit=1)) #['jason|123', 'read'] 从右往左切指定的个数
7、字符串格式化输出
format方法一:等价于占位符
res1 = 'my name is {}my age is {}'.format('jason', 123)
print(res1) # my name is jason my age is 123
format方法二:索引取值并支持反复使用
res2 = 'my name is {0} {1} my age is {1} {0} ,format('jaosn', 123)'
print(res2) # my name is jason 123 my age is 123 jiason
format方法三:占位符见名知意
res3 = 'my name is {name1} my age is {age1} {name1} {age1}'.format(name1='jason', age1=123)
print(res3) # my name is jaosn my age 123 jaosn 123
format方式四:推荐使用
name = input('user>>>:')
age =input('age>>>:')
l2 = f 'my name is {name} my age is {age}'
print(res)
3、字符串需要了解的方法
1、大小写相关
res = 'HeLLo World'
print(res.upper()) # HELLO WORLD
print(res.lower()) # hello world
实例:图片验证:生成没有大小统一的验证码 展示给用户看 获取用户的验证码 将用户验证码和当初产生的验证码统一转大写或者小写再对比
2、判断字符串中是否成纯数字
res = ''
print(res.isdigit()) #False
3、替换字符串中指定的内容
res = 'my name is jason jason jaosn my age is tony jason'
print(res.replace('jason', 'tony')) # my name is tony tony tony my age is tony tony 替换所有指定替换的内容
print(res.replace('jaosn', 'tony', 1)) # 从左往右替换指定的个数内容 my name tony jason jason my age is tony jason
4、字符串的拼接
l1 = 'hello'
l2 = 'world'
相加:
print(l1 + '$$$' + l2) # hello$$$world
print(l1 * 3) # hellohellohello
print('|'.join(['jason', '123', 'read'])) # jason|123|read 参与拼接的数据值必须是字符串类型
'''
参与拼接的数据值必须是字符串类型 (在python不同数据类型之间无法直接操作)
'''
5、统计字符出现的个数
res = 'hello world'
print(res.coun('l')) # 3
6、判断字符串的开头或者结尾
res3 = 'jaosn is big'
print(res3.startswith('jaosn')) # True
print(res3.startswith('j')) # Treu
print(res.startswith('ja')) # True
print(res3.startswith('is')) # Flase
print(res3.endswith('big')) # True
print(res3.endswith('g')) # True
7、其他方法补充
res4 = 'say Hello Hello'
print(res4.title()) # Say Hello Hello 开头首
print(res4.capitalize()) # Say hello hello
print(res4.swapcase()) # SAY hELLO hELLO
print(res4.index('o')) # 8
print(res4.find('e')) # 5
print(res4.index('p')) # 找不到直接报错
print(res4.find('p')) # 找不到默认返回-1
😏* 列表的内置操作
1、类型转换
list(其他数据类型)
PS:能够被for循环的数据类型都可以转成列表 字符串、字典、元组、集合
print(list('hello')) # ['h', 'e', 'l', 'l', 'o']
print(list({'name': 'jason', 'pwd': 123})) # ['name', 'pwd']
print(list((1, 2, 3, 4, 5))) # [1, 2, 3, 4, 5]
print(list({1, 2, 3, 4, 5}) # [1, 2, 3, 4, 5]
2、需要掌握的方法有
res6 = [11, 22, 33, 44, 55, 66]
1、索引取值(正负数)
print(res6[0])
print(res6[-1])
2、切片操作
print(res6[0:4]) # [11, 22, 33, 44]
print(res6[:]) # [11, 22, 33, 44, 55, 66]
print(res6[-1:-5]) # []
print(res6[-5:-1]) # [22, 33, 44, 55]
3、间隔数(间隔数 方向与字符串的都是一致)
print(res6[::-1]) # [66, 55, 44, 33, 22, 11]
print(res6[-1:-5:-1]) # [66, 55, 44, 33]
print(res6[1:5:1]) # [22, 33, 44, 55]
print(res6[1:5:2]) # [22,44]
print(res6[::2]) # [11, 33, 55]
4、统计列表中数据值的个数
print(len(res6)) # 6
5、数据值修改
res6[o] = 123
print(res6) [123, 22, 33, 44, 55, 66]
6、列表添加数据值
方式一:尾部追加(将括号内的数据值当成一个整体追加到列表末尾)
res6.append('99')
print(res6) # [11, 22, 33, 44, 55, 66, 99]
res6.append(['jason', 'kevin'])
print(res6) # [11, 22, 33, 44, 55, 66, ['jason', 'kevin']]
方式二:任意位置插入数据值(将括号内的数据值当做是一个整体插入到索引指定位置)
res6.insert(0, jason)
print(res6) # ['jason', 11, 22, 33, 44, 55, 66]
res6.insert(1, [99, 66, 88])
print(res6) # [11, [99, 66, 88], 22, 33, 44, 55, 66]
方式三:扩展列表
l1 = [11, 22, 33]
l2 = [44, 55, 66]
print(l1 + l2) # [11, 22, 33, 44, 55, 66]
l1.extend(l2) # 相当于for循环+append操作
print(l1) # [11, 22, 33, 44, 55, 66]
for i in l2:
l1.append(i)
print(l1) # [11, 22, 33, 44, 55, 66]
7、删除列表数据
num = [22, 33, 44, 55, 66]
方式一:通用的删除关键字del
del num[0]
print(num) # [22, 33, 44, 55, 66]
方式二:remove() 在括号内直接填写数据值
num.remove(22)
print(num) # [33, 44, 55, 66]
方式三:pop() 在括号内直接填写索引值
num.pop(3)
print(num) # [33, 44, 55]
l1.pop # 默认弹出尾部数据值
print(num) [22, 33, 44, 55]
弹出数据值:
num1 = num.pop(2)
print(num1) # 44
对比remove:
num2 = num.pop(2)
print(num2) # None
8、排序
i = [22, 54, 67, 12, 45, 67, 13, 62]
i.sort() # 默认是升序
print(i) # [12, 13, 22, 45, 54, 62, 67, 67]
i.sort(reverse=True) # 改为降序
print(i) # [67, 67, 62, 54, 45, 22, 13, 12]
9、统计列表中某个数据值出现的次数
print(i.count(22)) # 1
10、颠倒列表顺序
i.reverse()
print(i) # [62, 13, 67, 45, 12, 67, 54, 22]
😏 * 可变类型与不可变类型
l1 = '@@hello world@@'
res = [66, 99, 88]
l1.strip('@')
print(l1) # @@hello world@@
"""
字符串在调用内置方法之后并不会修改自己 而是产生了一个新的结果
如何查看调用内置方法有没有新的结果 可以在调用该方法的代码左侧添加变量名
"""
l2 = l1.strip('@')
print(l2) # hello world
res1 = res.append(11)
print(res) # [66, 99, 88, 11]
print(res1) # None
"""列表在调用该方法之后修改的是自身 并没有产生一个新的结果"""
可变类型:值改变 内存地址不变
res = [66, 99, 88]
print(res) # [66, 99, 88]
print(id(res)) # 2430719577480
res.append(11)
print(res) # [66, 99, 88, 11]
print(id(res)) # 2430719577480
不可变类型:值改变 内存地址肯定变
l2 = '@@hello world@@'
print(l2) # @@hello world@@
print(id(l2)) # 1846569412592
l3 = l2.strip('@')
print(l3) # hello world
print(id(l3s)) # 1946783222576
"""
可变类型 >>> 列表 字典 集合
值改变 内存地址不变 修改的是原值
不可变类型 >>> 整型 浮点型 字符串 元组
值改变 内存地址肯定变 其实是产生了新值
"""