Python学习.第七天.元组.集合
前言
最难不过坚持
今日骑行20公里!!!
一、什么是元组?
Python内置的数据结构之一,是一个不可变序列
不可变比序列:字符串、元组,没有增删改操作。
可变序列:可以对序列执行增删改操作,对象地址不发生改变。
二、为什么要将元组设计成不可变序列
一旦创建了不可变类型的对象,对象内部的所有数据就不能再修改了,这样就避免了由于修改数据而造成的错误。
在多任务环境下,同时操作对象时不需要加锁,因此,在程序中尽量使用不可变序列。
注意事项:元组中存储的时对象的引用
(1) 如果元组中对象本身不可变对象,则不能再引用其他对象。
(2) 如果元组中的对象是可变对象,则可变对象的引用不允许改变,但数据可以改变。
例如:t=(10,[20,30],9) 元组中存在一个列表的引用,指向列表的地址,地址不可变,但是存在该地址里的内容是可变的,比如增加 t[1].append(100),这时候 t=(10,[20,30,100],9)
t = (10, [20, 30], 9)
print(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
‘tuple’ object does not support item assignment“元组”对象不支持项赋值。但我们可以对列表(可变序列)进行修改。
可以用快捷键 Ctrl+D 复制当前行到下一行。
t = (10, [20, 30], 9)
print(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('--------------------------')
t[1].append(100)
print(t)
print(t[1], type(t[1]), id(t[1]))
我们可以看到下图中 t[1]是列表是可变序列,我们可以进行append操作,并且列表的内存地址也不会发生改变,
三、元组的创建
# 第一种创建方式
t = ('Python', 'wold', 100)
print(t)
print(type(t))
# 第二种创建方式
t1 = tuple(('Python', 'world', 100))
print(t1)
print(type(t1))
t2 = 'Python', 'world', 100 # 可以省略小括号创建
print(t2)
print(type(t2))
t3 = 'Python' # 只有一个元素不行,这样类型就成为了 str的
print(t3)
print(type(t3))
t4 = 'Python', # 如果元组中只有一个元素,则必须加逗号
print(t4)
print(type(t4))
lst = [] # 空列表
lst1 = list()
d = {} # 空字典
d2 = dict()
t = () # 空元组
t2 = tuple()
print('空列表', lst, lst1)
print('空字典', d, d2)
print('空元组', t, t2)
四、元组的遍历
元组是可迭代对象,所以可以使用for-in进行遍历
t = tuple(('Python', 'hello', 90))
print(len(t)) # 获取t的个数
for item in t:
print(item)
五、什么是集合?
Python语言提供的内置数据结构,与列表、字典一样都是属于可变类型的序列,集合是没有value的字典。
字典用{}创建,由{key:value}组成
六、集合的创建
# 第一种 创建方式
s = {2, 3, 4, 5, 6, 7, 8} # 集合中的元素不允许重复,若重复则只会输出一个
print(s)
# 第二种 创建方式
s = set(range(6))
print(s)
print(set[1, 2, 3, 4, 5]) # 可以将[]列表的元素转成集合类型
print(set([1, 2, 3, 4, 5])) # 可以将(())元组的元素转成集合类型
print(set('Python')) # 集合中的元素是无序的
print(set({1, 2, 3, 4, 5}))
# 定义一个空集合
s1=set()
print(type(s1))
七、集合的增、删、改、查操作
1.集合元素的判断操作
s = {2, 3, 4, 5, 6, 7, 8}
print( 10 in s)
print( 10 not in s)
2.集合元素的新增操作
add():一次添加一个元素
update():至少添加一个元素
s = {2, 3, 4, 5, 6, 7, 8}
print(s)
s.add(9)
print(s)
s.update({10, 11, 12, 13}) # 集合
print(s)
s.update([14, 15, 16, 17]) # 列表
print(s)
s.update((18, 19, 20, 21)) # 元组
print(s)
3.集合元素的删除操作
remove():一次删除一个指定元素,如果指定的元素不存在抛出KeyError
dicard():一次删除一个指定元素,如果指定的元素不存在也不抛出异常
pop():一次只删除一个任意元素
clear():清空集合
s.remove(21)
print(s)
s.pop() # pop 删除最左边的,但是最左边的不一定是最小的。
s.pop()
print(s)
八、集合之间的关系
(1)两个集合是否相等:可以使用运算符 == 与 =! 进行判断
(2)一个集合是否是另一个集合的子集:可以调用方法issubset
进行判断B是A的子集
(3)一个集合是否是另一个集合的超集:可以调用方法issuperset
进行判断A是B的超集
(4)两个集合是否没有交集:可以调用方法isdisjoint
进行判断
s1 = {0, 1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8, 9}
print(s1 == s2)
print(s1 != s2)
print('-----------------')
# 一个集合是否是另一个集合的子集
s1 = {0, 1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8, 9}
s3 = {3, 4, 5}
s4 = {13, 14, 15}
print(s2.issubset(s1)) # False
print(s3.issubset(s1)) # True
print(s3.issubset(s2)) # False
print('-----------------')
# 一个集合是否是另一个集合的超集
print(s1.issuperset(s3)) # True
print(s3.issuperset(s1)) # False
print('-----------------')
# 两个集合是否含有交集
print(s4.isdisjoint(s1)) # 没有交集为True
print(s1.isdisjoint(s2))
九、集合的数学操作
# 交集
s1 = {0, 1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8, 9}
print(s1.intersection(s2))
print(s1 & s2)
# 并集
print(s1.union(s2))
print(s1 | s2)
# 差集
print(s1.difference(s2))
print(s1 - s2)
# 对称差集
print(s1.symmetric_difference(s2))
print(s1 ^ s2)
十、集合生成式
# 列表生成式
lst = [i * i for i in range(1, 10)]
print(lst)
# 集合生成式
lst1 = {i * 2 for i in range(1, 10)}
print(lst1)
总结
好饿啊!去吃饭。
及时复习。