python数据类型内置方法

python数据类型内置方法

数据类型内置方法理论

在我们平时接触到的数据类型中,都有着多种多样的使用方法,而在python的大多数数据类型中,都有其自带的一些实用方法,这些方法就被称为内置方法

而在python中想要使用这些内置方法时,就需要用到调用统一句式:句点符

'字符串'.字符串内置方法
绑定字符串的变量名.字符串内置方法
str.字符串内置方法

以上三种就是句点符常用的三种方法

整型的内置方法相关操作

  • 类型转换——int(纯数字字符串/浮点型)
 ps: str类型只能转换整数(纯数字)、float类型可以用来取整
res = '123'
res1 = 123.9
print(type(res))  # str
print(type(res1))  # float
res = int(res)
res1 = int(res1)  
print(type(res))  # int
print(res1, type(res1))  # 输出结果为123,可见浮点型的转换采取的是一刀切的策略 int
  • 进制数转换
做进制数转换
将十进制数转换为其他进制数
print(bin(100))  # 将十进制的100转换成二进制 
print(oct(100))  # 将十进制的100转换成八进制  0o144
print(hex(100))  # 将十进制的100转换成十六进制  0x64
# 0b开头为二进制数  0o开头为八进制数  0x开头为十六进制数
2.将其他进制数转换为十进制数
print(int('0b1100100', 2))  # 100
print(int('0o144', 8))  # 100
print(int('0x64', 16))  # 100

浮点型的内置方法相关操作

  • 类型转换——float(数字类字符串/整型)
用途: 将其他类型(str类型和int类型)转换为float类型
res = '123.12'
print(type(res))  # str
res = float(res)  
print(type(res))  # float
print(float('123'))  # 123.0

字符串的内置方法相关操作

  • 类型转换——str(需要转换的数据类型)
用途: 将其他"任意类型"转换为str类型
print(str(123))
print(str(123.21))
print(str([1, 2, 3, 4]))
print(str({'name': '李帆', 'age': 25}))
print(str((1, 2, 3, 4)))
print(str(True))
print(str({1, 2, 3, 4}))
  • 索引取值——被索引数据/其变量名[索引值]
(起始位置0开始 超出范围直接报错)
A='hello world'
print(A[0])  # 索引第一位h
print(A[-1])  # 索引倒数第一位d
  • 切片操作——[y:y]
默认切片顺序是从左到右  
s1 = 'hello world'
print(s1[1:5])  # ello,从索引值起始位置切到结束位置,顾头不顾尾
print(s1[-1:-5])  # 因为默认从左到右的顺序,所以不会执行,但是不会报错
print(s1[-5:-1])  # worl,这样从倒数第五切到倒数第一,符合从左往右的顺序
  • 改变切片方向(间隔)——[y:y:y]
s1 = 'hello world'
print(s1[1:5:1])  # ello,默认间隔是1
print(s1[1:5:2])  # el,间隔为2
print(s1[-1:-5:-1])  # dlro当间隔为-1,按照从后向前,逆序切取
print(s1[:])  # hello world,不写数字就默认切取所有数据值
print(s1[2:])  # llo world,从索引2开始往后都要切取
print(s1[:5])  # hello,从索引0切取到索引值4
print(s1[::2])  # hlowrd,按照间隔为2的规律切取
  • 统计字符串中字符个数—len
A = 'hello world'
print(len(s1))  # 输出结果为11
  • 移除字符串首尾指定的字符——strip()
当括号内不填写任何东西时,默认为移除两端的空格
name = '    tony   '
print(name.strip())  # tony
name1 = '$$tony$$$' 
print(name1.strip('$'))  # tony
# lstrip() 只移除左边  rstrip() 只移除右边的
print(name1.lstrip('$'))  # tony$$$
print(name1.strip('$'))  # $$tony
  • 切割字符串中指定的字符——split()
括号内不填写任何东西是默认为空格,输出结果为列表
res = 'lifan|123|18'
print(res.split('|'))  # ['lifan', '123', '18']
print(res.split('|', maxsplit=1))  # ['lifan','123|18']  maxsplit用于控制切割的次数
#默认从左边开始切割
# rsplit  从右边开始切割
print(res.rsplit('|', maxsplit=1))  # ['lifan|123', '18']
  • 字符串格式化输出——format
format用法:等价于占位符
 res = 'my name is {} my age is {}'.format('李帆', 25)
 print(res)
 format用法2:索引取值并支持反复使用
 res = 'my name is {0} my age is {1} {0} {0} {1}'.format('李帆', 25)
 print(res)
format用法3:占位符见名知意
res = 'my name is {name1} my age is {age1} {name1} {age1} {name1} '.format(name1='李帆', age1=25)
print(res)
format用法4:
    name = input('username>>>:')
    age = input('age>>>:')
    res = f'my name is {name} my age is {age}'
    print(res)
  • 字符串中需要了解的内置方法
1.大小写相关
upper()、lower()
res = 'my NAME IS tom'
print(res.upper())  # MY NAME IS TOM   将英文字符串全部转变为大写
print(res.lower())  # my name is tom   将英文字符串全部转变为小写
# isupper() 和 islower()
res1 = res.upper()
res2 = res.lower()
print(res1.isupper())  # True 判断是否是纯大写
print(res2.isupper())  # False
print(res1.islower())  # False 判断是否是纯小写
print(res2.islower())  # Tru
2.判断字符串中是否是纯数字
res = ''
print(res.isdigit())
guess_age = input('guess_age>>>:').strip()
if guess_age.isdigit():
    guess_age = int(guess_age)
else:
    print('年龄都不知道怎么输吗???')
3.替换字符串中指定的内容
# 用新的字符替换字符串中旧的字符
str1 = 'my name is tom, my age is 18!'  # 将tom的年龄由18岁改成28岁
str1 = str1.replace('18', '28')  # 语法:replace('旧内容', '新内容')
print(str)  # my name is tom, my age is 28!
# 可以指定修改的个数
str1 = 'my name is tom, my age is 18!'
str1 = str1.replace('my', 'MY',1)  # 只把一个my改为MY
print(str1)  # MY name is tom, my age is 18!
4.字符串的拼接
方式1: +
print('hello' + 'world')  # helloworld
方式2: join
# 从可迭代对象中取出多个字符串,然后按照指定的分隔符进行拼接,拼接的结果为字符串
# 能被for循环的就是可迭代对象
print('%'.join('hello')) # 'h%e%l%l%o' 从字符串'hello'中取出多个字符串,然后按照%作为分隔符号进行拼接
print('|'.join(['tom','18','read']))  # 'tom|18|read' 从列表中取出多个字符串,然后按照|作为分隔符号进行拼接
5.统计指定字符出现的次数
count:统计字符串在大字符串中出现的次数
msg = "hello everyone"
msg.count('e')  # 统计字符串e出现的次数
6.判断字符串的开头或者结尾
res = 'my name is tom'
# startswith() 判断字符串是否以括号内指定的字符开头,结果为布尔值True或False
print(res.startswith('m'))  # True
print(res.startswith('my'))  # True
# endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False
print(res.endswith('m'))  # True
print(res.endswith('tom'))  # True
7.其他方法补充
*find:从指定范围内查找子字符串的起始索引,找得到则返回数字1,找不到则返回-1
msg='tony say hello'
msg.find('o',1,3)  # 在索引为1和2(顾头不顾尾)的字符中查找字符o的索引
*index:同find,但在找不到时会报错
msg.index('e',2,4) # 报错ValueError
*captalize:首字母大写
message = 'hello everyone nice to meet you!'
message.capitalize()
Hello everyone nice to meet you!  
*swapcase:大小写翻转
message1 = 'Hi girl, I want make friends with you!'
message1.swapcase()  
hI GIRL, i WANT MAKE FRIENDS WITH YOU!  
*title:每个单词的首字母大写
msg = 'dear my friend i miss you very much'
msg.title()
Dear My Friend I Miss You Very Much

列表的内置方法相关操作

  • 类型转换——list(其他数据类型)
能够被for循环的数据类型都可以转成列表
print(list('hello'))
print(list({'name': 'jason', 'pwd': 123}))
print(list((1, 2, 3, 4)))
print(list({1, 2, 3, 4, 5}))
  • 索引取值
list1 = ['tom', 'jerry', 'timor', 4, 5]
print(list1[0])  # tom 
print(list1[-1])  # 5
  • 切片操作
list1 = ['tom', 'jerry', 'timor', 4, 5]
print(list[0:3])  # ['tom', 'jerry', 'timor'] 
print(list[0:4:2]  # ['tom', 'timor']
统计列表中数据值的个数
  • 数据值修改
按照索引修改指定位置的值,但如果索引不存在则报错
list1 = ['tom', 'jerry', 'timor', 4, 5]
list1[0] = 'cat'
print(list1)  # ['cat', 'jerry', 'timor', 4, 5]
  • 列表添加数据值方式
append() 列表尾部追加元素
l1 = ['a', 'b', 'c']
print(l1.append('d'))  # ['a', 'b', 'c', 'd']
extend() 一次性在列表尾部添加多个元素
print(l1.extend(['a', 'b', 'c']))   # ['a', 'b', 'c', 'd', 'a', 'b', 'c']
insert() 在指定位置插入元素
print(l1.insert(0,'tom')  # ['tom', 'a', 'b', 'c', 'd', 'a', 'b', 'c']
  • 扩展列表\合并列表
ll1 = [11, 22, 33]
ll2 = [44, 55, 66]
print(ll1 + ll2)  # [11, 22, 33, 44, 55, 66]
ll1.extend(ll2) 
print(ll1)  # [11, 22, 33, 44, 55, 66]
  • 删除列表数据
*del()  # 按索引删除列表中的值
print(del l1[2])  # ['a', 'b']  删除索引为2的元素
pop()  # 默认删除列表最后一个元素并将删除的值返回 可以通过加入索引来指定删除元素
l1 = ['a', 'b', 'c']
*res = l1.pop()
print(l1)  # ['a', 'b']
print(res)  # c  
*remove()  # 括号内指名道姓表示要删除哪个元素,没有返回值
l1 = ['a', 'b', 'c']
res = l1.remove('b')
print(l1)  # ['a', 'c']
print(res)  # None
  • 排序
ss = [54, 99, 55, 76, 12, 43, 76, 88, 99, 100, 33]
ss.sort()  # 默认是升序
print(ss)
ss.sort(reverse=True)
print(ss)  # 改为降序
  • 统计列表中某个数据值出现的次数
print(列表名.count(数据值))
  • 颠倒列表顺序
列表名.reverse()
print(列表名)

可变类型与不可变类型

不可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型

可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型

# int
int_a = 1
print("整数a的地址{:};整数a的类型{:}".format(id(int_a), type(int_a)))
int_a = 2
print("整数a的地址{:};整数a的类型{:}".format(id(int_a), type(int_a)))
# 运行结果:
# 整数a的地址4542888688;整数a的类型<class 'int'>
# 整数a的地址4542888720;整数a的类型<class 'int'>

# 字符串
str_a = 1
print("字符串a的地址{:};字符串a的类型{:}".format(id(str_a), type(str_a)))
str_a = 2
print("字符串a的地址{:};字符串a的类型{:}".format(id(str_a), type(str_a)))
# 运行结果:
# 字符串a的地址4451588848;字符串a的类型<class 'int'>
# 字符串a的地址4451588880;字符串a的类型<class 'int'>

# tuple
list_c = [1,2,4]
# 元组中加入列表,验证元组是否地址会发生改变
tuple_c = (1,3,list_c)
print("未修改前元组的值{:},未修改前元组的地址{:},数据类型:{:}".format(tuple_c, id(tuple_c), type(tuple_c)))
#修改列表的值
list_c[1]='hello'
print("修改后元组的值{:}, 修改后元组的地址{:},数据类型:{:}".format(tuple_c,id(tuple_c), type(tuple_c)))
# 运行结果:
# 未修改前元组的值(1, 3, [1, 2, 4]),未修改前元组的地址4490637824,数据类型:<class 'tuple'>
# 修改后元组的值(1, 3, [1, 'hello', 4]), 修改后元组的地址4490637824,数据类型:<class 'tuple'>
# 元组定义值是不可更改的,嵌套的列表值虽然发生改变但是地址并未发生变化,表明修改只是在嵌套列表内部产生的效果,并未影响到元组本身,故元组前后值等于没有发生变化,
# 因此说明元组是不可变类型

# 列表
list_b = [1,2,3,4]
print("未修改前列表的值{:},未修改前列表的地址{:},数据类型{:}".format(list_b,id(list_b), type(list_b)))
list_b[1] = 'test'
print("修改后列表的值{:},修改后列表的地址{:},数据类型{:}".format(list_b,id(list_b), type(list_b)))
# 运行结果:
# 未修改前列表的值[1, 2, 3, 4],未修改前列表的地址4495392640,数据类型<class 'list'>
# 修改后列表的值[1, 'test', 3, 4],修改后列表的地址4495392640,数据类型<class 'list'>

# 集合
set_a = {1, 'a', 'bn', 3, 5}
print("未修改前集合的值{:},未修改前集合的地址{:},数据类型{:}".format(set_a,id(set_a), type(set_a)))
set_a.add('test')
print("修改后集合的值{:},修改后集合的地址{:},数据类型{:}".format(set_a,id(set_a), type(set_a)))
# 运行结果:
# 未修改前集合的值{1, 3, 5, 'a', 'bn'},未修改前集合的地址4513094784,数据类型<class 'set'>
# 修改后集合的值{1, 3, 'test', 5, 'a', 'bn'},修改后集合的地址4513094784,数据类型<class 'set'>


# 字典
dict_a = {"test1":1, "test2":2,"test3":3}
print("未修改前字典的值{:},未修改前字典的地址{:},数据类型{:}".format(dict_a,id(dict_a), type(dict_a)))

dict_a['test4'] = 'hello'
print("修改后字典的值{:},修改后字典的地址{:},数据类型{:}".format(dict_a,id(dict_a), type(dict_a)))
# 运行结果:
# 未修改前字典的值{'test1': 1, 'test2': 2, 'test3': 3},未修改前字典的地址4402480192,数据类型<class 'dict'>
# 修改后字典的值{'test1': 1, 'test2': 2, 'test3': 3, 'test4': 'hello'},修改后字典的地址4402480192,数据类型<class 'dict'>

不可变类型:值改变,内存地址肯定变

可变类型:值改变,内存地址不变

通过以上结果验证:

属于可变类型:字典、列表、集合;

属于不可变类型:字符串、整数、元组

练习

# 2.基于字符串充当数据库完成用户登录(基础练习)
#    data_source = 'jason|123'  # 一个用户数据
#    获取用户用户名和密码 将上述数据拆分校验用户信息是否正确
data_source = 'jason|123'
data_source.split('|')
while True:
    username = input('请输入用户名:')
    password = input('请输入用户密码:')
    if username == (data_source.split('|')[0]) and password == (data_source.split('|')[1]):
        print('登陆成功')
        break
    else:
        print('用户名或密码错误')

# 3.基于列表充当数据库完成用户登录(拔高练习)  # 多个用户数据
#    data_source = ['jason|123', 'kevin|321','oscar|222']
# data_source = ['jason|123', 'kevin|321', 'oscar|222']
name = data_source[0]
name1 = data_source[1]
name2 = data_source[2]
name.split('|')
name1.split('|')
name2.split('|')
a = (name.split('|')[0])
b = (name2.split('|')[0])
c = (name2.split('|')[0])
a1 = (name.split('|')[1])
b1 = (name2.split('|')[1])
c1 = (name2.split('|')[1])
while True:
    user_name = input('请输入您的用户名:')
    pass_word = input('请输入您的密码:')
    if user_name == a and pass_word == a1:
        print('登陆成功')
        break
    elif user_name == b and pass_word == b1:
        print('登陆成功')
        break
    elif user_name == c and pass_word == c1:
        print('登陆成功')
        break
    else:
        print('用户名或密码错误')
# 4.利用列表编写一个员工姓名管理系统
#     输入1执行添加用户名功能
#     输入2执行查看所有用户名功能
#     输入3执行删除指定用户名功能
#     '''分析 用户输入的不同 可以执行不同的代码'''
#     ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
#     提示: 循环结构 + 分支结构
user_list = []
A = True
while A:
    menu = (
        '------------------------\n'
        '员工信息管理系统1.0\n '
        '1.添加用户名\n '
        '2.查看所有用户名\n '  # 定义指令菜单
        '3.删除指定用户名\n'
        '4.退出系统'
        '------------------------')
    print(menu)  # 输出指令菜单
    while A:
        order = input('请输入您需要执行的指令>>>:').strip()  # 获取用户指令
        if int(order) == 1:  # 判定用户输入指令为1
            user_name = input('请输入您需要添加的用户名:').strip()  # 获取用户输入的用户名
            user_list.append(str(user_name))
            print('用户名保存成功')
        elif int(order) == 2:
            for i in user_list:
                print(i)
        elif int(order) == 3:
            del_name = input('请输入您需要删除的用户名:')
            user_list.index(del_name)
            del user_list[user_list.index(del_name)]
            print('删除成功')
        elif int(order) == 4:
            print('感谢使用')
            A = False
        else:
            print('请输入有效指令!!')

字典的内置方法相关操作

  • 类型转换
'''
强转成字典时,必须是等长的二级容器,元素个数为2,外层可以是列表、元组或集合,里面的容器是元组或者列表
	列: 
	[(1,2,),[1,2]]
	((1,2,),[1,2])
	{(1,2,),[1,2]}
如果里面出现集合(外层不是set集合{}),语法上是允许的,但有局限性  列: ([1,2],{1,2})
如果里面出现字符串,语法上是允许的,但有局限性,字符串的长度只能是2  列: ([1,2],'as')
'''
# 方式1:
d1 = dict([['name', 'tom'],('age', 21)]) 
print(d2)  # {'name':'tom', 'age':21}
# 方式2: fromkeys会从元组中取出每个值当做key,然后与None组成key:value放到字典中
d2 = {}
d2.formkeys(('name','age','sex'),None)  # {'name': None, 'age': None, 'sex': 
  • 按k键操作
dic = {
	'name': 'tom',
	'age': 21,
	'hobbby': ['LOL','basketball']
}
1、按key取值
print(dic['name'])  # tom
print(dic['age'])  # 21
2、按key修改值、存值
'''对于赋值操作,如果key原先存在于字典,就会更改value值'''
dic['name']  = 'timor'
print(dic)  # {'name': 'timor','age': 21,'hobbby': ['LOL','basketball']}
'''如果key原先不存在于字典,则会新增key:value'''
dic['sex'] = 'male'
print(dic)  # {'name': 'timor','age': 21,'hobbby': ['LOL','basketball'],'sex':'male'}
  • 计算数据个数
长度len
print(len(dic))  # 计算字典中键值对的个数
  • 成员运算
print('name' in dic)  # True
print('timor' in dic)  # False
'''
字典暴露在外面的只有他的key,没有value 值
'''
  • 删除
# 方式1.
del dic['name']
print(dic)  # {'age': 21,'hobbby': ['LOL','basketball'],'sex':'male'}
# 方式2  pop通过指定字典的key来删除字典的键值对 并返回value值
print(dic.pop('sex'))  # male
print(dic)  # {'age': 21,'hobbby': ['LOL','basketball']}
# 方式3  popitem 弹出键值对 组织成元组的形式 第一个元素是key第二个元素是value(了解)
print(dic.popitem())  # ('hobbby': ['LOL','basketball'])
print(dic)  # {'age': 21}
# 方式4 clear() 清除字典中所有元素
print(dic.clear()) # {}
  • get取值
dic = {
	'name': 'tom',
	'age': 21,
	'hobbby': ['LOL','basketball']
}
# 方法1. get(key)  若key存在则返回key对应的value  不存在则返回None
dic.get('name')  # 'tom'
print(dic.get('sex'))  # None  
 # 方式2. get(key,值)     
print(dic.get('name','timor'))  # tom  若key存在则返回key对应的value
print(dic.get('sex','male'))  # male  若key不存在则返回自定义的值
  • 字典三键客
键keys(),值values(),键值对items()
print(dic.keys())  # dict_keys(['name', 'age', 'hobby'])  获取字典所有的键
print(dic.values())  # dict_values(['tom', 21, ['LOL', 'basketball']])  获取字典所有的值
print(dic.items())  # dict_items([('name', 'tom'), ('age', 21), ('hobby', ['LOL', 'basketball'])])
# 获取字典里面所有的键值对,组织成列表套元组的形式,元组内有两个元素,第一个是key第二个是value
  • 补充
print(dict.fromkeys(['name', 'pwd', 'hobby'], 123))  # 快速生成值相同的字典
res = dict.fromkeys(['name', 'pwd', 'hobby'], [])
print(res)  # {'name': [], 'pwd': [], 'hobby': []}
res['name'].append('jason')
res['pwd'].append(123)
res['hobby'].append('study')
print(res)
    '''当第二个公共值是可变类型的时候 一定要注意 通过任何一个键修改都会影响所有'''
res = user_dict.setdefault('username','tony')
print(user_dict, res)  # 键存在则不修改 结果是键对应的值
res = user_dict.setdefault('age',123)
print(user_dict, res)  # 存不存在则新增键值对 结果是新增的值
user_dict.popitem()  # 弹出键值对 后进先出

元组的内置方法的相关操作

  • 类型转换
tuple()
ps:支持for循环的数据类型都可以转成元组
print(tuple(111))  # 报错
print(tuple(11.11))  # 报错
print(tuple('hello'))  # ('h', 'e', 'l', 'l', 'o')
print(tuple([11,22,33]))  # (11, 22, 33)
print(tuple({'name':'tom','pwd':123}))  # ('name', 'pwd')
  • 索引取值
t = (111, 222, 333, 444, 555)
print(t[2])  # 333
print(t[-1])  # 555
  • 切片
t = (111, 222, 333, 444, 555)
print(t[1:5])  # (222, 333, 444, 555)
print(t[1:])  # (222, 333, 444, 555)
print(t[:])  # (111, 222, 333, 444, 555)
  • 间隔
t = (111, 222, 333, 444, 555)
print(t[1:5:2])  # (222, 444)
  • 计算元组内数据个数
t = (111, 222, 333, 444, 555)
print(len(t))  # 5
  • for循环
t = (111, 222, 333, 444, 555)
for i in t:
	print(i, end = ' ' )  # 111 222 333 444 555
  • count计数
t = (111, 222, 333, 444, 555)
print(t.count(111))  # 1
  • 元组内如果只有一个数据值那么逗号不能少
  • 元组内索引绑定的内存地址不能被修改(注意区分 可变与不可变)
  • 元组不能新增或删除数据

集合的内置方法相关操作

  • 类型转换
能够支持for循环的数据类型都可以转成集合(元素要是不可变类型)
'''集合内元素是无序的'''
  • 去重
集合自带去重属性
s1 = {1, 2, 2, 2, 3, 4, 3, 4, 3, 1, 2, 3, 2, 1, 2, 3, 2, 1, 2, 3}
print(s1)  # {1, 2, 3, 4}  去重
示列:
name_list = ['kevin', 'jason', 'jason', 'jason', 'kevin', 'kevin']
# 1.先将列表转换成集合
s1 = set(name_list)
# 2.再将去重之后的集合转换成列表
l1 = list(s1)
print(l1)  # ['kevin', 'jason']
  • 成员运算
"""两个群体之间做差异比较    共同好友 共同关注..."""
friends1 = {"zero", "kevin", "jason", "eg"}  # 用户1的好友们
friends2 = {"Jy", "ricky", "jason", "eg"}  # 用户2的好友们
1.求两个用户的共同好友  交集
print(friends1 & friends2)  # {'jason', 'eg'}
2.求两个用户所有的好友  并集
print(friends1 | friends2)  # {'kevin', 'ricky', 'jason', 'zero', 'Jy', 'eg'}
3.求用户1独有的好友  差集
print(friends1 - friends2)  # {'zero', 'kevin'}
4.求用户2独有的好友  差集
print(friends2 - friends1)  # {'ricky', 'Jy'}
5.求用户1和用户2各自的好友  对称差集  
print(friends1 ^ friends2)  # {'Jy', 'zero', 'kevin', 'ricky'}
6.父集与子集  父集包含子集
s1 = {11, 22, 33, 44}
s2 = {11, 33}
print(s1 > s2)  # 判断s1是否是s2的父集   True
print(s2 < s1)  # 判断s2是否是s1的子集   True
posted @ 2022-09-29 21:14  逐风若梦  阅读(59)  评论(0编辑  收藏  举报