Python数据类型内置方法理论

Python数据类型内置方法和理论

引言:

Python自身对数字的敏感度比较低(精确度低)
如果是用在数据分析和金融量化方向,可以使用第三方包模块numpy

本文内容

  • 数据类型内置方法理论
  • 进制数转换
  • 整型相关操作
  • 浮点型相关操作
  • 字符串相关操作
  • 列表相关操作

数据类型内置方法理论

  1. 前面文章所提到的每一种数据类型本身都包含有一系列的操作方法,内置方法,是自身带的功能
  2. Python中的数据类型调用内置方法的统一句式为:
    ".":句点符 'wesley'.字符串的内置方法
  3. str. 字符串内置方法
  4. 数据类型的内置方法比较的多,其中有一些经常使用的以及部分不经常使用的,需要在工作中使用,并且熟悉

进制数转化

  1. 开头前两位代表的是转换后表示的进制数
  2. 0b代表的是二进制
  3. 0o代表的是八进制
  4. 0x代表的是十六进制
# 代码实例
# 十进制转换其他进制

# 十转二
print(bin(100))
0b1100100

# 十转八
print(oct(100))
0o144

# 十转十六
print(hex(100))i
0x64

# 如果需要八进制转换成其他进制直接反打就可以了

# 二转十
print(int(0b1100100), 2)
100 2

# 八转十
print(int(0o144), 8)
100 8

# 十六转十
print(int(0x64), 16)
100 16

整型的相关操作

  1. 类型转换(可以将其他类型转换为整型)
    int(其他数据类型),原始数据为浮点型可以直接转换,如果是字符串必须满足内部是纯数字才可以
# 代码实例

# str转int,注意字符串是不可变类型,这里需要重新赋值
a = '1111'
a = int(a)
print(type(a))
<class 'int'>

# float转int, 注意在float转int的时候int方法会将小数点后面的数据全部切除,而不是四舍五入,并且如果字符串中存在多个小数点,int无法识别并转换
a = 11.99
a = int(a)
print(type(a), a)
<class 'int'> 11

浮点型内置方法和操作

# 1. 类型转换
# 如果被转换的数据我字符串,需要满足数据必须为纯数字,或者只能有一个字符串
float(其他的数据类型)

# str带小数点转float
str_1 = '11.11'
str_1 = float(str_1)
print(type(str_1), str_1)
<class 'float'> 11.11

# str纯数字转float
str_2 = '1111'
str_2 = float(str_2)
print(type(str_2), str_2)
<class 'float'> 1111.0

字符串内置方法与操作(重点)

  1. str可以将其他所有类型的数据转为str,只需要使用引号将数据值包裹起来即可
# 重点***** :必须掌握

1. 索引取值(通过索引取值,起始位置0开始,超出索引范围即报错)

# 索引取值左开右闭,当取值最后一位索引等于输入值时不打印,比如需要取0-5的索引值,一般取值时会写索引6,这样就取到了0-5

1. 索引取值
str_1 = 'Hello world'  # 原始数据
print(str_1[0])  # 取第一个值
H

print(str_1[-1])  # 取最后一个值
d

2. 切片操作
print(str_1[1:5])  # 取索引1-4的值
ello

print(str_1[-5:-1])  # 如果需要重右边开始取值,切片是按照从左往右开始取,这里需要写-5:-1
worl

# 上面的写法还需要我们去计算后面的尾数索引是多少,可以修改切片的方向

3. 修改切片的方向(间隔,步长,默认值为一)
print(str_1[1:5:1])  # 取索引1到索引4的数据,第三位就是默认间隔
ello

print(str_1[1:5:2])  # 取索引1到索引4的数据,间隔设置为二,只能取1和4
el

print(str_1[-1:-5:-1])  # 改变取值方向,如果第三位直接默认为1,会取不到任何数据,这里设置为-1,就改变了原本从左向右取值,顺序也是重右向左排序
dlro

4. 切片中比较特殊的写法
print(str_1[:])  # : 什么都不写,表示全部都要
Hello world

print(str_1[2:])  # 2: 后面不写,表示从索引二开始后面都要
llo world

print(str_1[:5])  # :5 前面什么都不写表示,从前面都要,到索引5结束
Hello

print(str_1[::2])  # ::2 这里写了步长为2,表示每间隔2取值,如果不写步长就相当于全部都要
Hlowrd

Str方法

1. len()用于统计字符串中的长度

str_1 = 'Hello world'  # 原始数据

print(len(str_1))  #  长度为11,一共11个字符,空格也是字符
11

2. .strip()用于移除字符串首行和尾行的指定字符,默认为空格

# 用户登录场景:
"""
这里需要将用户输入的空格排除掉
"""
username = 'wesley'
in_name = input('请输入用户名:')
if in_name.strip() == username:
    print('登录成功')

2.1 lstrip()  # 去除字符左边的空格或指定为其他字符
2.2 rstrip()  # 去除字符右边的空格或指定为其他字符


3. split()切割字符串中指定的字符,原始数据中需要有特定的字符,注意split处理完成的数据将会以列表的形式打印

#原始数据
res = 'wesleu|123|read'  
print(res.split('|'))  # 使用split()方法对字符进行切割,切割的符号为管道符
['wesleu', '123', 'read']  # 数据完成后需要重新赋值,原因是字符串是不可变类型
a, b, c, = res.split('|')  # 从新解压赋值
print(a, b, c)

3.1  # split默认从左边开始切,可使用maxsplit= 指定需要切的次数 
print(res.split('|', maxsplit=1))
['wesleu', '123|read']

3.2  # rsplit 从右边开始向左边切,同样可以使用maxsplit= 参数控制向左切的次数
print(res.rsplit('|', maxsplit=1))
['wesleu|123', 'read']


4. format字符串格式化输出
4.1 应用一: 等阶于占位符
res = 'my name is {} my age is {}'.format('wesley', 123)
print(res)
my name is wesley my age is 123

4.2 应用二:索引取值并支持反复使用
res = 'my name is {0} my age is {0} {1}'.format('wesley', 123)
print(res)
my name is wesley my age is wesley 123

4.3 应用三:占位符见名知意
res = 'my name is {name} my age is {age} {name}'.format(name='wesley', age=23)
print(res)
my name is wesley my age is 23 wesley
4.4 应用四:推荐使用(*****)

"""
这种方式是根据用户输入来定义变量,并定义字符串模版开头使用f'字符串'来调用功能,字符串里面使用{变量名}来进行替换
"""
name = input('name >>:')
age = input('age >>:')
res = f'my name is {name} my age is {age}'
print(res)

name >>:wesley
age >>:18
my name is wesley my age is 18

5. 字符串需要了解的方法(****)

5.1 大小写相关
# 原始数据
res = 'hElLO WorlD 666'

5.1.1 upper()  # 将小写全部转换成大写
print(res.upper())
HELLO WORLD 666

5.1.2 lower()  # 将大写全部转换成小写
print(res.lower())
hello world 666

"""
应用场景:
图片验证码:生成没有大小写统一的验证码 展示给用户看
获取用户输入的验证码 将用户输入的验证码和当初产生的验证码统一转大写或者小写再比对
"""
code = 'AabCcDa'  # 初始验证码
confirm_code = input('请输入验证码:').strip()  # 用户输入的

if confirm_code.upper() == code.upper():  # 判断时全部转为大写
    print('验证码输入正确', confirm_code)
请输入验证码:  aabccda  # 用户手输入的验证码
验证码输入正确 aabccda  # confirm_code,变量还是小写是应为字符串是不可变类型,需要重新赋值

5.2 判断字符串是否全部大写或者小写

# 原始数据
res = 'hello world'

5.2.1 isupper() 判断字符串是否为纯大写,返回值: True False
print(res.isupper())
False

5.2.2 islower() 判断字符串是否为纯小写,返回值: True False
print(res.islower())
True

5.3 isdigit() 判断字符串中是否为纯数值,返回值: True False
rse = ''
print(rse.isdigit())  # 没有数字不成立
False

rse = '111'
print(rse.isdigit())  # 全部都是数字成立
True



6. replace()替换字符串中指定的内容
# 原始数据
res = 'my name is wesley wesley wesley wesley wesley'

6.1 使用replace()全部替换
print(res.replace('wesley', 'tonySB', ))

6.2 使用replace()替换第一个
print(res.replace('wesley', 'tonySB', 1))
my name is tonySB wesley wesley wesley wesley

7. 字符串的拼接

# 原始数据
7.1 使用运算的方式
s1 = 'Hello'
s2 = 'World'
print(s1 + s2)
print(s1 + '$$$' + s2)
print(s1 * 2)

7.2 使用join()方法拼接
print('$'.join(['wesley', '123', 'read', 'JDB']))
wesley$123$read$JDB

8.2 count() 统计指定字符出现的次数
# 原始数据
res = 'Hello world'

print(res.count('l'))  # 统计l出现了几次
3

9. 判断字符串的开头或者结尾
# 原始数据
res = 'Hello world'
9.1 startswith()  # 判断开头
print(res.startswith('Hello '))  # 结果为bool值,单个字母或者多个字母都可以
True


9.2 endswith()  # 判断结尾  # 结果为bool值
print(res.endswith('d'))
True


10. 冷门方法
# 原始数据
res = 'helLO wORld hELlo worLD' 

10.1 title()  # 首字母全部大写
print(res.title())
Hello World Hello World

10.2 capitalize()  # 仅首字母大写
print(res.capitalize())

10.3 swapcase()  # 小写变大写,大写变小写
print(res.swapcase())
HELlo WorLD HelLO WORld

10.4 index()  # 查询字符是否存在,不区分大小写
print(res.index('O'))
4
# index() 的缺点是找不到就回报错

10.5 find()  # 查询字符是否存在
print(res.find('O'))  # 查询字符是否存在,不区分大小写

print(res.find('c'))  # 查询不到返回值为-1
-1
print(res.find('LO')) # en...待补充


列表内置方法及操作

list(其他数据类型)
能够被for遍历的数据都可以转成列表

1. list()  # 转换其他类型的数据
print(list('hello'))  # str
print(list({'name': 'wesley'}))  # dcit
print(list((1, 2, 3, )))  # toulp
print(list({1, 2, 3, 4, }))  # set

2. 需要掌握的方法(*****)
# 原始数据
11 = [111, 222, 333, 444, 555, 666, 777, 888]
2.1 索引取值(正负数),这里和字符串方法一致
print(l1[0])  # 取第一个
111

print(l1[-1])  # 取最后一个
888

2.2 切片操作,这里和字符串方法一致
# 原始数据
11 = [111, 222, 333, 444, 555, 666, 777, 888]
print(l1[:])  # 取所有
[111, 222, 333, 444, 555, 666, 777, 888]

print(l1[0:5])  # 取索引0-5
[111, 222, 333, 444, 555]

print(l1[-1:-5:-2])  # 从右边开始取值,并且间隔为2
[888, 666]

2.3 统计列表中数据的个数
print(len(l1))  # 注意 这里是列表里的元素,不是单个字符串
8

2.4 数据值修改 ,列表是可变的数据类型
# 原始数据
11 = [111, 222, 333, 444, 555, 666, 777, 888]

print(id(l1))
l1[0] = 123
print(l1)
print(id(l1))
4346559360  # 内存ID
[123, 222, 333, 444, 555, 666, 777, 888]
4346559360  # 内存ID

2.5 列表添加数据值 append()
2.5.1 尾部添加数据值
l1.append(1010)
print(l1)
[111, 222, 333, 444, 555, 666, 777, 888, 1010]

2.5.2 任意位置插入数据值
l1.insert(0, 'test')  # 从起始位置插入一个test
print(l1)
['test', 111, 222, 333, 444, 555, 666, 777, 888]

2.6 扩展列表和合并列表
# 原始数据
l1 = [11, 22, 33]
l2 = [44, 55, 66]

2.6.1 运算大法
print(l1 + l2)
[11, 22, 33, 44, 55, 66]

2.6.2 extend()  # 将l2的值与l1合并
l1.extend(l2)
print(l1)
[11, 22, 33, 44, 55, 66]

2.6.3  for循环+append大法
for i in l2:
    l1.append(i)
print(l1)
[11, 22, 33, 44, 55, 66]

2.7 删除列表数据
# 原始数据
l2 = [44, 55, 66]
2.7.1 del 关键字删除
del l2[0]
print(l2)
[55, 66]

2.7.2 remove()  # 这里直接填写需要删除的数据值
l2.remove(55)  # 删除数据值55
print(l2)
[44, 66]

2.7.3 pop()  # 这里填写索引值 
l2.pop(2)  # 这里删除66 索引为2
print(l2)
[44, 55]

l2.pop()  # pop() 默认弹出尾部的数据值
print(l2)

2.8  排序
# 原始数据
ss = [54, 99, 55, 76, 12, 43, 76, 88, 99, 100, 33]

2.8.1 sort()  # 默认为升序
ss.sort()
print(ss)
[12, 33, 43, 54, 55, 76, 76, 88, 99, 99, 100]

2.8.2 sort(reverse=True) # 通过reverse=True 改为降序
ss.sort(reverse=True)
print(ss)
[100, 99, 99, 88, 76, 76, 55, 54, 43, 33, 12]

2.9 统计列表中某个数据值出现的次数
# 原始数据
11 = [111, 222, 333, 444, 555, 666, 777, 888]
print(l1.count(111))
1

2.9.1 颠倒列表顺序
l1.reverse()  # 这里和sort的指定值一样,只是这里直接调用为空
print(l1)
[888, 777, 666, 555, 444, 333, 222, 111]

可变类型与不可变类型

  1. 不可变类型:字符串,值改变 内存地址肯定变
  2. 可变类型:列表,值改变 内存地址不变
1. 不可变类型,值改变 内存地址肯定变
name = '&&&wesley&&&'
print(name.strip('&'))
print(name)
"""
上列的代码可以看出,当我们使用方法后并没有对变量的本身做出修改,如果需要修改则需要从新赋值,修改代码添加重新赋值
"""
name = '&&&wesley&&&'
print(name)
print(id(name))
name = (name.strip('&'))
print(name)
print(id(name))
&&&wesley&&&
4305721904
wesley
4305694064

"""
这里可以看出,只有重新赋值后才能修改,但是实际上是内存中新申请了空间存放了新的数据,旧数据被放弃
"""



2. 可变类型,值改变 内存地址不变
l1 = [11, 22, 33]
print(id(l1))
l1.append(44)
print(id(l1))
print(l1)
4376705920
4376705920
[11, 22, 33, 44]

"""
这里的代码就可以看出,即使对l1 做出了添加新的值,但是内存中的ID值依旧没有改变,这就是可变类型和不可变类型的区别
"""

联系题

"""
基于字符串充当数据库完成用户登录(基础练习)
data_source = 'jason|123'  # 一个用户数据
获取用户用户名和密码
将上述数据拆分校验用户信息是否正确
"""
 # 用户数据为,数据库数据需要使用字符串方法进行处理
data_source = 'wesley|123'
data_source = data_source.split('|')
username = input('请输入用户名:'.strip())  # 这里需要使用方法将用户输入的行首和行尾空格删除
if username == data_source[0]:
	passd = input('请输入密码:')  # 如果等于,需要用户输入密码,需要对非数字进行处理
	if passd.isdigit() == False:
		print('密码是数字老弟!!!')
	elif passd.isdigit() == True:
		passd = int(passd)
		data_source[1] = int(data_source[1])
		if passd == data_source[1]:
			print('登录成功')
		else:
			print('密码输入错误')
else:
	print('你走吧,我没有你这个用户')



# 基于列表充当数据库完成用户登录(拔高练习)  # 多个用户数据
data_source = ['jason|123', 'kevin|321', 'oscar|222']
username = input("请输入用户名:").strip() # 1
passwd = input("请输入密码:").strip()   # 2
for i in data_source:
	user, pwd1 = i.split('|')
	if username == user and passwd == pwd1:
		print("成功")
		break
else:
	print("失败")



posted @ 2025-03-13 13:27  樵夫-  阅读(13)  评论(0)    收藏  举报