1.什么是元组
- 内置数据结构之一,不可变序列
- 不可变序列:字符串和元组,特点:没有增删改,对象地址改变
- 可变序列:列表和字典,特点:有增删改,对象地址不变
2.元组创建
# 法1
t = ('python', 'world', 98) # 括号可省略
print(t)
print(type(t))
t1 = ('python',) # 如果只有1个值,则必须加上小括号和逗号
# 法2
t2 = tuple(('python', 'world', 98))
print(t2)
# 空元组的创建
t3 = ()
t4 = tuple()
3.为什么是不可变序列
在多任务中,操作对象时不改变数据
注意:
元组存储的是对象的引用
如果元组中对象本身是不可变对象(如字符串和int),则不能引用其他对象(不能修改)
如果是可变对象(如列表),引用不能变,但引用的数据可以变(列表对象里的数据)
4.元组的遍历
t = ('python', 'world', 98)
# 第一种
print(t[0])
print(t[1])
print(t[2])
# 遍历
for i in t:
print(i)
5.什么是集合
集合是没有value的字典
6.集合的创建
# 第一种
s = {2, 3, 4, 5, 5, 6, 7, 7} # 集合和字典的键类似,不允许重复
print(s) # {2, 3, 4, 5, 6, 7}
# 第二种
s1 = set(range(6))
s2 = set([0, 1, 2])
s3 = set('python')
s4 = set({1,2,3,4})
print(s1)
print(s2)
print(s3)
print(s4)
# 创建空集合
s5 = set()
# s5 = {}定义的是空字典
7.集合的相关操作
# 判断是否存在
s = {10, 20, 30, 405, 60}
print(10 in s)
print(10 not in s)
print(100 in s)
# 增加
# add()加一个元素
s.add(80)
print(s)
# update()至少加一个元素
s.update({200, 300, 400})
s.update([100, 99, 8])
s.update((78, 64, 2))
print(s)
# 删除
# remove()删除一个,不存在报错
s.remove(100)
print(s)
# discard()删除一个,不存在不操作,不报错
s.discard(500)
print(s)
# pop()随机删除一个,应该是第一个
s.pop()
s.pop()
print(s)
# clear()清空集合
s.clear()
print(s)
8.集合的关系
s = {10, 20, 30, 40}
s1 = {20, 30, 40, 10}
# 是否相等,元素相等就相等,与顺序无关
print(s == s1) # True
print(s != s1) # False
# 子集
s2 = {10, 20, 30, 50}
s3 = {10, 20, 30}
s4 = {10, 60}
print(s3.issubset(s2)) # True
print(s4.issubset(s2)) # False
# 超集(包含)
print(s2.issuperset(s3)) # True
print(s2.issuperset(s4)) # False
# 交集 disjoint没有交集
print(s2.isdisjoint(s3)) # False
9.集合的数学操作
s = {10, 20, 30, 40}
s1 = {20, 30, 40, 50}
# 交集
print(s.intersection(s1))
print(s & s1)
# 并集
print(s.union(s1))
print(s | s1)
# 差集
print(s.difference(s1))
print(s - s1)
# 对称差集
print(s.symmetric_difference(s1))
print(s ^ s1)
10.集合生成式
s = {i for i in range(10)}
print(s)