20201127数据类型_元组/字典/集合

在这里插入图片描述

元组

元组简介

• 元组表现形式tuple

	• 元组是一个不可变序列(一般当我们希望数据不改变时,我们使用元组,其他情况下基本都用列表)

• 使用()创建元素

tuple1=()  #定义一个元组

• 元组不是空元组至少有一个 逗号(,) 当元组不是空元组时括号可以省略

tuple1=(1)
tuple2=(1,)		# 元组不是空元组至少有一个逗号','
tuple3=1,2		# 元组不是空元组时括号可以省略
print(type(tuple1))
print(type(tuple2))
print(type(tuple3))

结果:

<class 'int'>
<class 'tuple'>
<class 'tuple'>

• 元组解包指将元组当中的每一个元素都赋值给一个变量

tuple1=(1,2,3,4)
a,b,c,d=tuple1
print(a,b,c,d)

结果:

1 2 3 4
tuple1=(1,2,3,4)
a,b,c,d,e=tuple1
print(a,b,c,d,e)

结果: 拆包后的数量应与元组中元素的个数一致。

Traceback (most recent call last):
  File "<input>", line 2, in <module>
ValueError: not enough values to unpack (expected 5, got 4)

• 当拆包后的元素小于元组长度时,用*号将多余的元素放在一个 对象中

tuple1=(1,2,3,4)
... a,*b=tuple1
... print(a,b)

结果:多个元素拆包为list

1 [2, 3, 4]

字典

字典简介

字典的基本介绍
• 字典属于一种新的数据结构称为映射(mapping)
• 字典的作用和列表类似,都是用来存储对象的容器
• 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
• 在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以找到指定的元素
• 这个唯一的名字我们称之为key 通过key可以快速查询value 也可以称之为值
• 字典我们也称之为键值对(key-value)结构
• 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
• 创建一个有数据的字典 语法 {key:value}

	• 字典的键可以是任意的不可变对象(int str bool tuple....) 
	• 字典的值可以是任意对象

• 字典的键是不能重复的,如果出现重复的后面的会替换前面的

字典的使用

• dict()函数来创建字典

dic1={}
dic1=dict(name='刘亦菲',sex='female')
print(dic1,'\n',type(dic1))
{'name': '刘亦菲', 'sex': 'female'} 
 <class 'dict'>

• 双值子序列

list1=[('name','刘亦菲'),('sex','female')]
dic1=dict(list1)
print(dic1)

结果:

{'name': '刘亦菲', 'sex': 'female'}

• get(key[,default]) 根据键来获取字典的值。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值

dic1={'name':'刘亦菲','sex':'female','height':'170'}
print(dic1['name'])
print(dic1.get('name','保密'))
print(dic1.get('age','保密'))

结果:

刘亦菲
刘亦菲
保密

• 添加setdefault(key,value):
如果key已存在,则返回value,不影响字典
如果key不存在,则在最后添加一个key-value

dic1={'name':'刘亦菲','sex':'female','height':'170'}
res1=dic1.setdefault('age',18)
res2=dic1.setdefault('sex','male')
print(dic1)

结果:

{'name': '刘亦菲', 'sex': 'female', 'height': '170', 'age': 18}

• update() 将其他字典的key-value添加到当前的字典当中

dic1={'name':'刘亦菲','sex':'female','height':'170'}
dic2={'age':'20'}
dic1.update(dic2)
print(dic1)

结果:

{'name': '刘亦菲', 'sex': 'female', 'height': '170', 'age': '20'}

• del 删除字典中指定的key-value

dic1={'name':'刘亦菲','sex':'female','height':'170'}
del dic1['sex']
print(dic1)

结果:

{'name': '刘亦菲', 'height': '170'}

• popitem() 删除字典最后的一个key-value 这个方法是有返回值的。删除之后它会将删除的key-value作为返回值返回

dic1={'name':'刘亦菲','sex':'female','height':'170'}
res=dic1.popitem()
print(dic1)
print(res)

结果:

{'name': '刘亦菲', 'sex': 'female'}
('height', '170')

• pop(key[,default]) 根据key删除自定中的value。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值

dic1={'name':'刘亦菲','sex':'female','height':'170'}
dic1.pop('height')
print(dic1)

结果:

{'name': '刘亦菲', 'sex': 'female'}

•copy() 方法用来对字典进行浅复制

import copy
dic1={'name':'刘亦菲','sex':'female','height':'170'}
dic2=copy.copy(dic1)
dic3=copy.deepcopy(dic1)
print(dic2)
print(dic3)
print('字典1的id是:',id(dic1),'\n字典2的id是:',id(dic2),'\n字典3的id是:',id(dic3))

结果:

{'name': '刘亦菲', 'sex': 'female', 'height': '170'}
{'name': '刘亦菲', 'sex': 'female', 'height': '170'}
字典1的id是: 2887594381568 
字典2的id是: 2887594384064 
字典3的id是: 2887593973952

注意:浅复制只会复制字典本身,如果字典中还有个字典是不会进行复制的

遍历字典

我们主要可以通过3种方式对字典进行遍历
• keys() 该方法返回字典所有的key

dic1={'name':'刘亦菲','sex':'female','height':'170'}
print(dic1.keys())

结果:

dict_keys(['name', 'sex', 'height'])

• values() 该方法返回一个序列 序列中保存有字典的值

dic1={'name':'刘亦菲','sex':'female','height':'170'}
print(dic1.values())

结果:

dict_values(['刘亦菲', 'female', '170'])

• items() 该方法会返回字典中所有的项 它返回一个序列,序列中包含有双值子序列 双值分别是 字典中的key和value
示例2:

dic1={'name':'刘亦菲','sex':'female','height':'170'}
print(dic1.items())

结果:

dict_items([('name', '刘亦菲'), ('sex', 'female'), ('height', '170')])

示例2:

dic1={'name':'刘亦菲','sex':'female','height':'170'}
for k,v in dic1.items():
	print(k,v)

结果:

name 刘亦菲
sex female
height 170

集合

集合简介

• 集合表现形式set 集合和列表非常相似
• 不同点

	•  集合只能存储不可变对象
	•  集合中存储的对象是无序的
	•  集合不能出现重复元素
	•  使用{}来创建集合

集合的方法

• 可以通过set()来将序列和字典转换成集合

dic1={'name':'刘亦菲','sex':'female','height':'170'}
list1="沈腾","贾玲","潘斌龙","周星驰","吴孟达"
s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s2=set(dic1)
s3=set(list1)
print('字典转换集合结果为:',s2,'\n列表转换集合结果为:',s3)

结果:

字典转换集合结果为: {'sex', 'name', 'height'} 
列表转换集合结果为: {'潘斌龙', '吴孟达', '周星驰', '贾玲', '沈腾'}

• len() 获取集合中元素的数量

s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
print(len(s1))

结果:

7

• add()向集合中添加元素

s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s1.add('周星驰')
print(s1)

结果:

{1, 2, 3, 4, '潘斌龙', '周星驰', '贾玲', '沈腾'}

• update()将一个集合中的元素添加到另一个集合当中

s1={1,2,3,4}
s2={'沈腾','贾玲','潘斌龙'}
s1.update(s2)
print(s1)

结果:

{1, 2, 3, 4, '潘斌龙', '沈腾', '贾玲'}

• pop()随机删除集合中的一个元素,一般是删除第一个元素

s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s1.pop()
print(s1)

结果:

{2, 3, 4, '潘斌龙', '贾玲', '沈腾'}

• remove() 删除集合中指定的元素

s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s1.remove(2)
print(s1)

结果:

{1, 3, 4, '潘斌龙', '贾玲', '沈腾'}

• clear() 清空集合

s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s1.clear()
print(s1)

结果:

set()

集合的运算

• & 交集运算:取两个集合相同元素

s1={1,2,3,4,5,6}
s2={3,4,5,6,7,8}
print(s1&s2)

结果:

{3, 4, 5, 6}

• | 并集运算:取两个集合所有元素,并合并相关元素

s1={1,2,3,4,5,6}
s2={3,4,5,6,7,8}
print(s1|s2)

结果:

{1, 2, 3, 4, 5, 6, 7, 8}

• - 差集运算:取前一集合比后一集合多余的元素

s1={1,2,3,4,5,6}
s2={3,4,5,6,7,8}
print(s1-s2)
print(s2-s1)

结果:

{1, 2}
{8, 7}

• ^ 亦或集:取两个集合不相同元素

s1={1,2,3,4,5,6}
s2={3,4,5,6,7,8}
print(s1^s2)

结果:

{1, 2, 7, 8}

• <= 检查一个集合是否是另一个集合的子集
• < 检查一个集合是否是另一个集合的真子集

s1={3,4,5,6}
s2={1,2,3,4,5}
s3={3,4,5,6,7,8}
print('s1是s3的子集:',s1<=s3)
print('s2是s3的子集:',s2<=s3)
print('s1是s3的真子集:',s1<s3)
print('s2是s3的真子集:',s2<s3)

结果:

s1是s3的子集: True
s2是s3的子集: False
s1是s3的真子集: True
s2是s3的真子集: False

• >=检查一个集合是否是另一个集合的超集
• >检查一个集合是否是另一个集合的真超集

s1={3,4,5,6}
s2={1,2,3,4,5}
s3={3,4,5,6,7,8}
print('超集:',s3>=s1)
print('真超集:',s3>s2)

结果:

超集: True
真超集: False

代码练习

1.a = {“name”:“123”,“data”:{“result”:[{“src”:“python1”},{“src”:“python2”},{“src”:“python3”}]}} 找到python1/python2/python3

dic1={"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}}
l=len(dic1['data']['result'])
for i in range(l):
   print(dic1['data']['result'][i]['src'])

结果:

python1
python2
python3

2.有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。

s1={11,22,33,44,55,66,77,88,99,90}
max_data=[]
min_data=[]

for s in s1:
    if s >66 :
        max_data.append(s)
    elif s<66:
        min_data.append(s)
dic1={
    'key1':max_data,
    'key2':min_data
}
print(dic1)

结果:

{'key1': [99, 77, 88, 90], 'key2': [33, 11, 44, 22, 55]}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值