7. 集合

7.1. 概述

集合是一种:无序、元素唯一的容器类型。

备注:无序是指从集合中取出元素的顺序,与定义集合时存入的顺序不一定一致。

集合分为两种,分别是:

  1. 可变集合(set):内部的元素无序(不保证顺序)、不能通过下标访问元素、会自动去除重复元素。
  2. 不可变集合(forzenset):特点和可变集合一样,唯一的区别就是:其中的元素不可修改。

7.2. 定义集合

1️⃣可变集合的定义方式:使用花括号{}包裹,不同的数据项之间,用,做分隔。

# 定义有内容的【可变集合】
s1 = {10, 20, 20, 30, 40, 40, 50, 60, 60, 70, 80, 90, 100}
s2 = {'你好', 'hello', '你好', 'dsrw', '北京'}
s3 = {10, '你好', True, 1, 12.4}
print(type(s1), s1)
print(type(s2), s2)
print(type(s3), s3)

注意:不能直接写{}来定义空集合,因为直接写{}定义的是:空字典。

# 不能直接写{}来定义空集合,因为直接写{}定义的是:空字典
s2 = {}
print(type(s2), s2)  # <class 'dict'> {}

2️⃣不可变集合的定义方式:借助内置的forzenset函数。

# 定义有内容的【不可变集合】
s1 = frozenset({10, 20, 20, 30, 40, 40, 50, 60, 60, 70, 80, 90, 100})
s2 = frozenset({'你好', 'hello', '你好', 'dsrw', '北京'})
s3 = frozenset({10, '你好', True, 1, 12.4})
print(type(s1), s1)
print(type(s2), s2)
print(type(s3), s3)

# frozenset 接收的参数,可以是任意可迭代对象,但最终返回的一定是【不可变集合】
s1 = frozenset([10, 20, 30, 40, 50])
s2 = frozenset((10, 20, 30, 40, 50))
s3 = frozenset('hello')
print(type(s1), s1)
print(type(s2), s2)
print(type(s3), s3)

# 定义空集合(可变集合)
s1 = set()
print(type(s1), s1)

# 不能直接写{}来定义空集合,因为直接写{}定义的是:空字典
s2 = {}
print(type(s2), s2)

# 定义空集合(不可变集合)
s3 = frozenset()
print(type(s3), s3)

3️⃣集合中不能嵌套【可变集合】,但可以嵌套【不可变集合】

为什么会这样?——只有“不可变”的东西,才能安全的放进集合里。

不能嵌套【可变集合】,但可以嵌套【不可变集合】
# 通俗理解:只有“不可变”的东西,才能安全的放进集合里
s1 = {10, 20, 30, 40, 50}
s2 = frozenset({100, 200, 300, 400, 500})
l1 = [666, 777, 888]
t1 = ('hello', 'dsrw', '北京')

# s3 = {11, 22, 33, s1} # 报错
# s3 = {11, 22, 33, s2} # 没问题
# s3 = {11, 22, 33, l1} # 报错
s3 = {11, 22, 33, t1} # 没问题
print(s3)

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容