一、元组
1、什么是元组
python内置的数据之一、是不可变序列
2、不可变序列与可变序列
- 不变可变序:字符串、元组
- 不变可变序列: 没有增、删,改的操作
- 可变序列:列表、字典
-
可变序列:可以对序列执行增、删、改操作,对象地址不发生更改
3、元组的创建
# 元组的创建方式
# 第一种创建方式,使用()
t = ('Python', 'word', 88)
print(t)
print(type(t)) # 查看数据类型
t2 = 'Python', 'word', 88 # ()可以省略
print(t2)
print(type(t2)) # 如果只有一个元素,需要使用逗号和小括号
t3 = ('Python',)
print(t3)
print(type(t3))
# 第二种创建方式,使用内置函数tuple()
t1 = tuple(('Python', 'word', 88))
print(t1)
print(type(t1))
# 空元组
t4 = ()
t5 = tuple()
print('空元组', t4)
print('空元组', t5)
运行结果:
t = (10, [20, 30], 5)
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 # 元组是不允许修改元素的'''
# 由于[20, 30]列表,而列表是可变序列,所以可以向列中添加元素,而列表的的内存地址不变
t[1].append(100)
print(t, id(t[1]))
运行结果:
4、元组的遍历
# 元组的遍历
t = ('hello', 'word', 88)
# 第一种获取元组元组的方式,使用索引
print(t[0])
print(t[1])
print(t[2])
# 遍历元组
for item in t:
print(item)
二、集合
1、集合
2、集合的创建
# 集合的创建方式
# 第一种,使用{}
s = {1, 2, 4, 5, 5, 6, 7, 7, 7} # 集合中的元素不允许重复 重复的元素会自动去掉
print(s, type(s))
# 第二种,使用内置函数set()
s1 = set(range(6))
print(s1, type(s1))
# 通过set()将列表中的元素转为集合中的元素
s2 = [1, 56, 5, 6, 79]
set(s2)
print(s2, type(s2))
s3 = (1, 2, 4, 5, 65)
# 通过set()将元组中的元组转为集合中的元素
set(s3)
print(s3, type(s3))
# 通过set()将字符串序列转为集合中的元素
s4 = set('python') # 集合中的元素是无序的
print(s4, type(s4))
# 通过set()将集合转为集合中的元素
s5 = {1, 2, 5, 8}
set(s5)
print(s5, type(s5))
# 空集合
s6 = set()
print(s6, type(s6))
运行结果:
3、集合的相关操作
s = {10, 20, 30, 40, 50}
# 集合元素的判断操作
print(10 in s)
print(100 in s)
print(100 not in s)
print(10 not in s)
# 集合元素的新增操作
s.add(80) # 一次添加一个元素
print(s)
s.update({200, 300, 400}) # 一次至少添加一个元素
s.update([800, 701])
s.update((101, 90))
print(s)
# 集合元素的删除
s.remove(101)
print(s)
# s.remove(500) # KeyError: 500 如果指定的元素不存在会抛出异常
s.discard(500) # 如果指定的元素不存在不会抛出异常
s.discard(10)
print(s)
s.pop() # 一次只删除一个任意元素
print(s)
s.pop()
print(s)
# s.pop(200) # TypeError: set.pop() takes no arguments (1 given) 不能有参数
s.clear() # 清空集合中的元素
print(s)
运行结果:
4、集合间的关系
# 两个集合是否相等(元素相同,就相等)
s = {10, 20, 30, 40}
s1 = {30, 20, 40, 10}
print(s == s1) # True
print(s != s1) # False
# 一个集合是否是另一个集合的子集 issubset()
s1 = {10, 20, 30, 40, 50}
s2 = {10, 20, 30}
s3 = {10, 60}
print(s2.issubset(s1)) # True
print(s3.issubset(s1)) # False
# 一个集合是否是另一个集合的超集 issuperset()
print(s1.issuperset(s2))
print(s1.issuperset(s3))
# 两个集合是否含有交集 isdisjoint()
print(s2.isdisjoint(s1)) # False 有交集为False
s4 = {100, 200, 300}
print(s4.isdisjoint(s1)) # True 没有交集为True
5、集合的数学操作
# (1)交集
s1 = {10, 20, 30, 40}
s2 = {10, 30, 40, 50, 70}
print(s1.intersection(s2))
print(s1 & s2) # intersection() 与 & 等价,都是交集操作
# (2)并集
print(s1.union(s2))
print(s1 | s2) # union() 与 | 等价,都是并集操作
# (3)差集
print(s1.difference(s2))
print(s1 - s2) # difference() 与 - 等价,都是差集合操作
# (4)对称差集
print(s1.symmetric_difference(s2))
print(s1 ^ s2) # symmetric_difference() 与 ^等价,都是对称差集合操作
运行结果:
5、集合生成式
# 集合生成式
s = {i*i for i in range(8)}
print(s) # {0, 1, 4, 36, 9, 16, 49, 25}
总结: