基本数据类型的内置方法(二)

本文详细介绍了Python中的元组、字典和集合的内置方法,包括元组的不可变性质、类型转换、取值与操作,字典的键值存储、长度、成员运算、删除和操作方法,以及集合的创建、关系运算和去重特性。

八大数据类型的内置方法

四、元组(tuple)的内置方法

1.作用

元组与列表类似,也是可以存多个任意类型的元素,不同之处在于元组的元素不能修改,即元组相当于不可变的列表,用于记录多个固定不允许修改的值,单纯用于取

2.类型转换

	但凡能被for循环的遍历的数据类型都可以传给tuple()转换成元组类型
	print(tuple('qwer'))  # ('q', 'w', 'e', 'r')
	print(tuple([1,2,3]))  # (1, 2, 3)
	print(tuple({'name':'chen','age':18}))# ('name', 'age') 传递出来的是字典的
										 # key值
	print(tuple((1,2,3)))  # (1, 2, 3)
	print(tuple({1,2,3,4}))  # (1, 2, 3, 4)
	'''所有能够支持for循环的数据类型都可以转换为元组类型'''

3.使用

	tuple1 = (1, 'hhaha', 15000.00, 11, 22, 33) 
	1、按索引取值(正向取+反向取):只能取,不能改否则报错!  
	print(tuple1[0]) # 1
	print(tuple1[-2]) # 22
	
	'''元组不能改变值'''
	tuple1[0] = 'hehe'  # 报错:TypeError:
	 
	2、切片(顾头不顾尾,步长)
	tuple1[0:6:2] # (1, 15000.0, 22)
	
	3、长度
	print(len(tuple1)) # 6
	
	4、成员运算 innot in
	print('hhaha' in tuple1) # True
	print('hhaha' not in tuple1)  # False 
	 
	5、循环
	for line in tuple1:
		print(line , end=' ') # 1 hhaha 15000.0 11 22 33 

	'''拓展'''
	1.元组内部如果只有一个元组也要加逗号,否则就不是元组,只有加了逗号才是元组
	错误示范:
	res = (123) 							
	print(type(res)) # <class 'int'>       
	res1 = (123.2)
	print(type(res1)) # <class 'float'>
	res3 = ('hello')
	print(type(res3)) # <class 'str'>
	
'''以后只要是容器类型的数据类型,内部只要只有一个元素,末尾都推荐加一个逗号'''

	"""
	容器类型:只要是内部能够存放多个元素的都可以称为是容器类型
	    eg:list dict tuple set 
	不是容器类型的:int float str bool
	"""

五、字典(dict)的内置方法

1.类型转换

转换1: 
info=dict([['name','tony'],('age',18)])
print(info) # {'name': 'tony', 'age': 18}

转换2:fromkeys会从元组中取出每个值当做key,然后与None组成key:value放到字典中
print({}.fromkeys(('name', 'age', 'sex'), None)) 
# {'name': None, 'age': None, 'sex': None}

在这里插入图片描述

2.优先掌握的操作

1、按key存取值:可存可取
1.1 取
dic = {
	'name': 'xxx',
	'age': 18,
	'hobbies': ['play game', 'basketball']
}
print(dic['name']) # xxx
print(dic['hobbies'][1]) # basketball

1.2 对于赋值操作,如果key原先不存在于字典,则会新增key:value
dic = {'name':'chen','age':18,'height':'182'}
dic['gender'] = 'male'
print(dic) #{'name': 'chen', 'age': 18, 'height': '182', 'gender': 'male'}

1.3 对于赋值操作,如果key原先存在于字典,则会修改对应value的值
dic = {'name':'chen','age':18,'height':'182'}
dic['name'] = 'jack'
print(dic) # {'name': 'jack', 'age': 18, 'height': '182'}

=================

2、长度len
print(len(dic)) # 3

=================

3、成员运算innot in
'''判断某个值是否是字典的key'''
print('name' in dic) # True
print('name' not in dic) # False 

=================

4、删除
dic.pop('name')  # 通过指定字典的key来删除字典的键值对
print(dic) # {'age': 18, 'height': '182'}

=================

'''字典的三剑客'''
5、键keys(),值values(),键值对items()
dic = {'name':'chen','age':18,'height':'182'}

'''keys方法把字典中得所有的key值组织成一个列表'''
print(dic.keys())   # 获取字典所有的key
# dict_keys(['name', 'age', 'height'])

print(dic.values()) # 获取字典所有的value
# dict_values(['chen', 18, '182'])

print(dic.items()) # 获取字典所有的键值对
# dict_items([('name', 'chen'), ('age', 18), ('height', '182')])

=================

6、循环
6.1 默认遍历的是字典的key
for i in dic:
    print(i, end=' ') # name age height 

6.2 只遍历key
for i in dic.keys():
	print(key , end = ' ') # name age height 

6.3 只遍历value
for i in dic.values():
	print(i , end = ' ') # chen 18 182 

6.4 遍历key与value
for i in dic.items():
	print(i , end = ' ') #('name', 'chen') ('age', 18) ('height', '182') 

3.需要掌握的操作

	1.get()
	dic= {'k1':'jason','k2':'Tony','k3':'JY'}
	print(dic.get('k1')) # 'jason'  key存在,则获取key对应的value值
	print(dic.get('xxx')) # key不存在,不会报错而是默认返回None
	print(dic.get('xxx',666)) # '666' key不存在时,可以设置默认返回的值
	# ps:字典取值建议使用get方法,中括号取值是可以用的

	2.pop()
	dic= {'k1':'jason','k2':'Tony','k3':'JY'}
	v = dic.pop('k2') # 删除指定的key对应的键值对,并返回值
	print(dic) # {'k1': 'jason', 'k3': 'JY'}
	
	3.popitem()
	dic= {'k1':'jason','k2':'Tony','k3':'JY'}
	v = dic.popitem() # 随机删除一组键值对,并将删除的键值放到元组内返回
	print(dic)  # {'k1': 'jason', 'k2': 'Tony'}

	4.update()
	'''用新字典更新旧字典,有则修改,无则添加'''
	dic= {'k1':'jason','k2':'Tony','k3':'JY'}
	dic.update({'k1':'JN','k4':'xxx'})
	print(dic) #{'k1': 'JN', 'k2': 'Tony', 'k3': 'JY', 'k4': 'xxx'}

	5.fromekey()
	dic = dict.fromkeys(['k1','k2','k3'],[])
	print(dic) # {'k1': [], 'k2': [], 'k3': []}

	6.setdefault()
	'''key不存在则新增键值对,并将新增的value返回'''
	dic={'k1':111,'k2':222}
	res=dic.setdefault('k3',333)
	print(res) # 333
	print(dic) # {'k1': 111, 'k3': 333, 'k2': 222} 字典中新增了键值对
	
	'''key存在则不做任何修改,并返回已存在key对应的value值'''
	dic={'k1':111,'k2':222}
	res=dic.setdefault('k1',666)
	print(res) # 111
	print(dic) # {'k1': 111, 'k2': 222} 字典不变

六、集合(set)的内置方法

1.类型转换

	但凡能被for循环遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型)
	都可以传给set()转换成集合类型
	v1 = set([1,2,3,4])
	print(v1) # {1, 2, 3, 4}
	
	v2 = set((1,2,3,4))
	print(v2) # {1, 2, 3, 4}
	
	v3= set({'name':'chen'})
	print(v3) # {'name'}
	
	v4 = set('ankn')
	print(v4) # {'k', 'n', 'a'} 去重复的字符了,并且无序的

在这里插入图片描述

2.关系运算

	我们定义两个集合friends1和friends2来分别存放两个人的好友名字,
	然后以这两个集合为例讲解集合的关系运算
	friends1 = {'zero','chen','jason','tom'}
	friends2 = {'hani','oscar','jason','tom'}
	 
	1.合集/并集(|):求两个用户所有的好友(重复好友只留一个)
	print(friends1 | friends2)  
	# {'zero', 'oscar', 'jason', 'chen', 'tom', 'hani'}
	 
	2.交集(&):求两个用户的共同好友
	print(friends1 & friends2)  # {'tom', 'jason'}
	 
	3.差集(-):
	求用户1独有的好友
	print(friends1 - friends2)  # {'chen', 'zero'}
	
	求用户2独有的好友
	print(friends2 - friends1)  # {'hani', 'oscar'} 
	 
	4.对称差集(^) # 求两个用户独有的好友们(即去掉共有的好友)
	print(friends1 ^ friends2)  # {'zero', 'hani', 'chen', 'oscar'}
	 
	5.值是否相等(==)
	print(friends1 == friends2) # False
	 
	6.父集:一个集合是否包含另外一个集合
	6.1 包含则返回True
	print((1,2,3) > (1,2)) # True
	print((1,2,3) >= (1,2)) # True

	6.2 不存在包含关系,则返回False
	print(((1,2,3) >(1,3,4,5) )) # False
	print(((1,2,3) >= (1,3,4,5) )) # False
	 
	7.子集
	print((1,2) < (1,2,3))  # True
	print((1,2) <=  (1,2,3)) # True

3.去重

	集合去重复有局限性
	1.只能针对不可变类型
	2.集合本身是无序的,去重之后无法保留原来的顺序
	
	l=['a','b',1,'a','a']
	s=set(l)
	print(s) # {'b', 'a', 1} 将列表转成了集合
	
	l_new=list(s) # 再将集合转回列表
	print(l_new) # ['b', 'a', 1] 去除了重复,但是打乱了顺序
	 
	针对不可变类型,并且保证顺序则需要我们自己写代码实现,例如
	l=[
	    {'name':'lili','age':18,'sex':'male'},
	    {'name':'jack','age':73,'sex':'male'},
	    {'name':'tom','age':20,'sex':'female'},
	    {'name':'lili','age':18,'sex':'male'},
	    {'name':'lili','age':18,'sex':'male'},
	]
	 
	new_l=[]
	 
	for dic in l:
	    if dic not in new_l:
	        new_l.append(dic)
	 
	print(new_l)
	# 结果:既去除了重复,又保证了顺序,而且是针对不可变类型的去重
	[
	    {'age': 18, 'sex': 'male', 'name': 'lili'}, 
	    {'age': 73, 'sex': 'male', 'name': 'jack'}, 
	    {'age': 20, 'sex': 'female', 'name': 'tom'}
	]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值