2022.11.6
1.什么是元组
# 元组
# 不可变序列、可变序列
'''可变序列:列表、字典(目前学到)'''
lst=[10,20,45]
print(lst,id(lst))
lst.append(300)
print(lst,id(lst))
'''不可变序列:字符串,元组(目前学到)'''
s='hello'
print(s,id(s))
s+='world'
print(s,id(s))
2.元组的创建方式
# 元组的创建方式
'''第一种创建方式,使用()'''
t=('python','world',98)
print(t,type(t))
t2='python','world',98 # 省略了小括号
print(t2,type(t2))
t3=('python',) # 如果元组中只有一个元素,逗号不能省
print(t3,type(t3)) # ('python',)
'''第二种创建方式,使用内置函数tuple()'''
t1=tuple(('python','world',98))
print(t1,type(t1))
'''空元组的创建方式'''
lst=[] # 空列表
lst1=list()
d={} # 空字典
d2=dict()
# 空元组
t4=()
t5=tuple()
print('空列表',lst,lst1)
print('空字典',d,d2)
print('空元组',t4,t5)
t=(10,[20,30],9)
print(t)
print(type(t))
print(t[0],type(t[0]),id(t[0]))
print(t[1],type(t[1]),id(t[1]))
print(t[2],type(t[2]),id(t[2]))
'''尝试将t[1]改为100'''
print(id(100))
# t[1]=100 # 元组是允许修改元素的 TypeError: 'tuple' object does not support item assignment
'''由于[20,30]列表,而列表是可变序列,所以可以向列表中添加元素,而列表的内存地址不变'''
t[1].append(100) # 向列表中添加元素
print(t,id(t[1]))
3.元组的遍历
# 元组的遍历
t=('python','world',98)
'''第一种获取元组元素的方式,使用索引'''
print(t[0])
print(t[1])
print(t[2])
# print(t[3]) # 前提是知道有多少个元素 ,否则报错 IndexError: tuple index out of range
'''第二种方式:遍历元祖'''
for item in t: # 这里t是元组的名字
print(item) # item表示元组中每一个元素
4.集合的创建
# 集合
# 集合的创建方式
'''第一种创建方式:使用{}'''
s={2,3,4,5,5,6,7,7} # 集合中的元素不允许重复
print(s) # {2, 3, 4, 5, 6, 7}
'''第二种创建方式:使用内置函数set()'''
s1=set(range(6)) # 将产生的整数序列通过set转成集合
print(s1,type(s1)) # {0, 1, 2, 3, 4, 5}
s2=set([1, 2, 4, 5, 5, 5, 6, 6]) # 将列表中的元素转成集合类型
print(s2,type(s2)) # {1, 2, 4, 5, 6}
s3=set((1,2,4,4,5,65)) # 将元组类型的元素转成集合类型的元素
print(s3,type(s3)) # 接种的元素是无序的 {65, 1, 2, 4, 5}
s4=set('python') # 将字符串序列转成集合中的元素
print(s4,type(s4)) # {'y', 't', 'o', 'h', 'p', 'n'}
s5=set({12,4,34,55,66,44,4}) # 将集合中的元素通过set转成集合类型(实际上不转也是集合)
print(s5,type(s5)) # {34, 66, 4, 55, 12, 44} --位置改变了,同时去掉了重复元素
'''定义一个空集合'''
s6={} # dict字典类型
print(type(s6)) #
s7=set()
print(type(s7)) #
5.集合的相关操作
# 集合的相关操作
s={10,20,30,405,60}
①集合元素的判断操作
'''1.集合元素的判断操作'''
print(10 in s) # True
print(100 in s) # False
print(10 not in s) # False
print(100 not in s) # True
②集合元素的新增操作
'''2.集合元素的新增操作'''
'①add一次添加一个元素'
s.add(80)
print(s) # {10, 80, 20, 405, 60, 30}
'②update一次至少添加一个元素'
s.update({200,400,300})
print(s) # {200, 10, 300, 80, 400, 20, 405, 60, 30}
s.update([100,99,8])
print(s) # {99, 100, 200, 8, 10, 300, 80, 400, 20, 405, 60, 30}
s.update((78,64,56))
print(s) # {64, 99, 100, 200, 8, 10, 300, 78, 80, 400, 20, 405, 56, 60, 30}
③集合元素的删除操作
'''3.集合元素的删除操作'''
'①remove()'
s.remove(100)
print(s) # {64, 99, 200, 8, 10, 300, 78, 80, 400, 20, 405, 56, 60, 30}
# s.remove(500) # KeyError: 500
'②discard()'
s.discard(500) # 不抛异常
s.discard(300) # {64, 99, 200, 8, 10, 78, 80, 400, 20, 405, 56, 60, 30}
print(s)
'③pop()'
s.pop() # 随意删一个
print(s) # {99, 200, 8, 10, 78, 80, 400, 20, 405, 56, 60, 30}
s.pop()
print(s) # {200, 8, 10, 78, 80, 400, 20, 405, 56, 60, 30}
# s.pop(400) # 不能添加参数
print(s)
'④clear()'
s.clear() # 清空集合中的元素
print(s) # set()
④集合间的关系
'''4.集合间的关系'''
# ①两个集合是否相等(元素相同就相等)
'集合中的元素是无序的,底层存储顺序相同'
s={10,20,30,40}
s2={30,40,20,10}
print(s==s2) # True
print(s!=s2) # False
# ②一个集合是否是另一个集合的子集
s1={10,20,30,40,50,60}
s2={10,20,30,40}
s3={10,20,90}
print(s2.issubset(s1)) # s2是s1的子集吗True
print(s3.issubset(s1)) # False
# ③一个集合是否是两一个集合的超集
print(s1.issuperset(s2)) # s1是s2的超集吗True
print(s1.issuperset(s3)) # False
# ④两个集合是否没有交集
print(s2.isdisjoint(s3)) # s2和s3是否没有交集?False 有交集
s4={100,200,300}
print(s2.isdisjoint(s4)) # True 没有交集
⑤集合的数学操作
'''5.集合的数学操作'''
# ①交集
s1={10,20,30,40}
s2={20,30,40,50,60}
print(s1.intersection(s2))
print(s1 & s2) # intersection()与&等价,交集操作
print(s1)
print(s2) # 交集之后的s1集合、s2集合没有发生变化
# ②并集
print(s1.union(s2))
print(s1|s2) # union与|等价,并集操作
print(s1)
print(s2) # 并集之后的s1集合、s2集合没有发生变化
# ③差集操作
print(s1.difference(s2))
print(s1-s2)
print(s1)
print(s2) # 差集之后的两个原集合没有发生变化
# ④对称差集
print(s1.symmetric_difference((s2)))
print(s1^s2) # symmetric_difference和^等价
6.集合生成式
# 集合生成式
'''列表生成式'''
lst=[i*i for i in range(10)]
print(lst) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
'''集合生成式'''
s={i*i for i in range(10)}
print(s) # {0, 1, 64, 4, 36, 9, 16, 49, 81, 25} 无序