从0开始学Python-day6-元祖、字典、集合
Python元组(tuple)
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号 ( ),列表使用方括号 [ ]。
1、创建元组
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
1.1 存放相同类型的数据
tup1 = (1, 2, 3, 4, 5 )
1.2 存放不同类型的数据
tup2 = ( 'hqyj', 2004)
1.3 不需要括号也可以
tup3 = "a", "b", "c", "d"
1.4 只包含一个元素
元组中只包含一个元素时,需要在元素后面添加逗号 ,否则括号会被当作运算符使用:
tup1 = (50) tup2 = (50,)
2、访问元组
元组与字符串类似,下标索引从 0 开始,可以进行截取,组合等。
tup1 = ('python', 'hqyj', 100, 200) tup2 = (1, 2, 3, 4, 5, 6, 7 ) print (tup1[0])#python print (tup2[1:5])#(2, 3, 4, 5) print (tup2[:4])#(1, 2, 3, 4) print (tup2[2:])#(3, 4, 5, 6, 7)
3、修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
tup1 = (12, 34.56) tup2 = ('abc', 'xyz') # 创建一个新的元组 tup3 = tup1 + tup2 print (tup3) # 以下修改元组元素操作是非法的。 # tup1[0] = 100
4、删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组(删除的是变量)
tup = ('openAI', 'hqyj', 100, 200) print (tup) del tup print (tup)#name 'tup' is not defined
5、元组运算符
与字符串一样,元组之间可以使用 +、+=和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。
Python 表达式 | 结果 | 描述 |
---|---|---|
len((1, 2, 3)) | 3 | 计算元素个数 |
(1, 2, 3)+(4, 5, 6) | (1, 2, 3, 4, 5, 6) | 连接得到一个新的元组 |
('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | 复制 |
3 in (1, 2, 3) | True | 元素是否存在 |
for x in (1, 2, 3): print (x) | 1 2 3 | 迭代 |
6、元组不可变
为什么要有元组:函数和元组往往一起使用,用于设计API多参数/多返回值的场景。
元组和列表可以互相转换
所谓元组的不可变指的是元组所指向的内存中的内容不可变。
tup = (1, 2, 3, 4, 5, 6, 7) tup[1] = 100 print(tup)#报错'tuple' object does not support item assignment
7、元组常用API
Python元组包含了以下内置函数
序号 | 方法 | 描述 |
---|---|---|
1 | len(tuple) | 返回元组中元素个数。 |
2 | max(tuple) | 返回元组中元素最大值。 |
3 | min(tuple) | 返回元组中元素最小值。 |
4 | tuple(list) | 将列表转换为元组。 |
Python字典(dict )
字典是一种可变容器模型,且可存储任意类型对象。
字典的每个键值对( key:value )用冒号分割,每个对之间用逗号分割,整个字典包括在花括号 {} 中
d = {key1 : value1, key2 : value2, key3 : value3 }
1、创建字典
dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict。
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
键名相同,最后的值会覆盖前面的值。(键名不能一样)。
字典中键值对的 键名可以是不可变的数据类型,键值可以是任何数据类型
d1 = {}#创建空字典 d2 = dict()#使用内建函数 dict()创建字典 d3 = {"name":"karen","age":23} d4 = dict({"name":"jack","age":24})print(d3)# 打印字典 print(len(d3))# 查看字典的数量 print(type(d3))# 查看类型
2、访问字典里的值
把相应的键放入到方括号中。键名是字符串要加'',键名是列表不加''。(列表是在字典的基础上进行严格定义的)。列表有的功能字典不一定有,列表有slice函数,通过此函数实现切片功能。
字典的键无论是不是有顺序的数字,都不能切片,只能通过key取值。
mydic = {'Name': 'hqyj', 'Age': 7, 'Class': 'First'} print (mydic['Name']) print (mydic['Age'])
如果用字典里没有的键访问数据,会输出错误
mydic = {'Name': 'hqyj', 'Age': 7, 'Class': 'First'} print (mydic['Alice'])
3、修改字典
向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对。取字典中不存在的键报错,存数据到存在的键中就会更新,不存在的键中就会新增一对键值对。
mydic = {'Name': 'hqyj', 'Age': 7, 'Class': 'First'} mydic['Age'] = 8 # 更新 Agemydic['School'] = "华清" #添加信息 print (mydic['Age']) print (mydic['School'])
4、删除字典元素
能删单一的元素也能清空字典,清空只需一项操作clear
显式删除一个字典用del命令
mydic = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}del mydic['Name'] # 删除键 'Name' mydic.clear() # 清空字典print (mydic['Age']) print (mydic['School'])del mydic # 删除字典 x9={}#空值
5、字典键的特性
字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
mydic = {'Name': 'jack', 'Age': 27, 'Name': 'karen'} print (mydic['Name'])
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
mydic1 = {97:"a",98:"b"} mydic2 = {"name":"karen","age":27} mydic3 = {['Name']: 'karen', 'Age': 27} print(mydic3[['Name']])#报错unhashable type: 'list'
6、字典常用API
操作字典的函数:
序号 | 函数 | 描述 |
---|---|---|
1 | len(dict) | 计算字典元素个数,即键的总数。 |
2 | str(dict) | 输出字典,可以打印的字符串表示。类型变成了字符串,网络传输数据时很有用。#JSON是一种字符串 |
3 | type(variable) | 返回输入的变量类型,如果变量是字典就返回字典类型。 |
字典的方法:
序号 | 函数及描述 |
---|---|
1 | dict.clear()删除字典内所有元素 |
2 | dict.copy()返回一个字典的浅复制 |
3 | dict.fromkeys(seq)创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
4 | dict.get(key, default=None)返回指定键的值,如果键不在字典中返回 default 设置的默认值。取值。 |
5 | key in dict如果键在字典dict里返回true,否则返回false |
6 | dict.items()以列表返回一个视图对象,键:键值 |
7 | dict.keys()返回一个视图对象 |
8 | dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default。建议直接写= |
9 | dict.update(dict2)把字典dict2的键/值对更新到dict里,更新到dict里,重复的会覆盖 |
10 | dict.values()返回一个视图对象,输出键值 |
11 | pop(key,default)删除字典 key(键)所对应的值,返回被删除的值。不能删除不存在的键名 |
12 | popitem()返回并删除字典中的最后一对键和值。没有键值对了是不能删除的,不然报错 |
Python集合(set)
集合(set)是一个无序的不重复元素序列。
集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。
1、创建集合
可以使用大括号 { } 创建集合,元素之间用逗号 , 分隔, 或者也可以使用 set() 函数创建集合。
集合中可以保存不可变数据(字符串,数字,元组等),可以写入多个相同的数据,但是最后只会保存一次。可以去除列表中重复的元素。集合中的元素是无序的。
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
parame = {value01,value02,...}
set(value)
set1 = {1, 2, 3, 4}# 直接使用大括号创建集合 set2 = set([4, 5, 6, 7])# 使用 set()函数从列表创建集合 set3 = set((4, 5, 6, 7))# 使用 set()函数从元组创建集合 set({})#空集合
2、添加元素
将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
s.add( x ) 添加元素到集合 ,字典,列表不能添加到集合中
s.update( x ) 添加元素到集合,且参数可以是列表,元组,字典等 ,x 可以有多个数据容器,用逗号分开(必须是可迭代的数据容器,比如列表,元组,字典)。会把元组中的元素(列表)添加进集合,会报错。字典转换为集合只取key值。
s1 = set((4, 5, 6, 7)) s1.add(100) print(s1) s1.update([200,300]) print(s1)
3、移除元素
s.remove( x ):将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。不能移除集合中不存在的元素。
s.discard( x ):将元素 x 从集合 s 中移除,如果元素不存在,不会发生错误。可以移除集合中不存在的元素。
s.pop():对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。
s1 = {10, 20, 30} s1.remove(20) print(s1) s1.remove(40)#报错
s1 = {10, 20, 30} s1.discard(20) print(s1) s1.discard(40)
s1 = {10, 20, 30} s1.pop() print(s1)
4、计算集合元素个数
len(s):计算集合元素个数
s1 = {10, 20, 30} print(len(s1))
5、清空集合
s.clear():清空集合
s1 = {10, 20, 30} s1.clear() print(s1)
6、判断元素是否在集合中存在
x in s 判断元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
s1 = {10, 20, 30} print(20 in s1)
7、集合内置方法完整API
集合的方法
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合#深拷贝 |
difference() | 返回多个集合的差集,原来的集合不改变 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。原来的集合改变了 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集。原集合不改变。 |
intersection_update() | 返回集合的交集。原集合改变。(会操作原来的s15集合,保留阴影部分 (交集)) |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True(不相交),否则返回 False(相交)。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。是子集则为True,不是子集则为False |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。并交叉。不修改原集合 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。修改原集合。 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
len() | 计算集合元素个数 |