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)

总结

好饿啊!去吃饭。
及时复习。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值