集合(Set)是一种可变、无序的数据类型,集合中的元素是唯一的,不重复的
诶?我们之前讲过的字典也是同样的可变,无序的数据类型,但是字典是键值对的存储形式,而集合不是
1、初识集合
集合使用大括号 {}
包裹着,元素之间使用逗号 ,
分隔,集合中的元素可以是字符串、数字、元祖等其他任何不可变数据类型。
# 字典例子
set = {1, 2, '3', (1, 2)}
print(set)
集合里的元素不能放可变数据类型,必须是不可变的数据元素
2、创建集合
使用{ }
创建
代码语言:javascript复制set = {1, 2, 3, 4, 5}
print(set)
# 输出结果
{1, 2, 3, 4, 5}
直接使用花括号创建的字典,那突然有个问题,创建空集合使用{}可以用吗? set2 = {} print(set2,type(set2)) # 输出结果 {} <class 'dict'>
结果是字典类型,说明使用{ }
创建的是空字典
使用set()
函数
set()
是一个内置函数,用于创建一个集合。set()
函数可以接受一个可迭代对象作为参数,并将其转换为一个集合。如果没有提供参数,则返回一个空集合。
可迭代对象有字符串,列表,元祖,字典,集合
1、创建空集合
代码语言:javascript复制my_set = set()
print(my_set, type(my_set))
# 输出结果
set() <class 'set'>
2、集合里放字符串
代码语言:javascript复制my_set = set('hello')
print(my_set, type(my_set))
# 输出结果
{'l', 'o', 'h', 'e'} <class 'set'>
3、集合里放列表
代码语言:javascript复制my_set = set([1, 2, 3, 4])
print(my_set, type(my_set))
# 输出结果
{1, 2, 3, 4} <class 'set'>
4、集合里放元祖
代码语言:javascript复制my_set = set((1, 2, 3, 4))
print(my_set, type(my_set))
# 输出结果
{1, 2, 3, 4} <class 'set'>
5、集合里放字典
代码语言:javascript复制my_set = set({"1": 1, "2": 2, "3": 3})
print(my_set, type(my_set))
# 输出结果
{'3', '2', '1'} <class 'set'>
集合里元素是不可变元素,上述是使用set()函数可以把列表和字典转换为集合元素,而因为字典中键是不可变的,所以使用set函数放入字典,只会转换字典的键
3、集合特性
集合最大的特性是元素是唯一的,不允许重复
唯一性
举例说明:
代码语言:javascript复制my_set = {1, 2, 3, 2, 3, 5}
print(my_set)
猜猜打印结果是什么
输出结果:{1, 2, 3, 5}
集合不允许有重复元素,后边可以帮助我们去重
无序性
表示我们无法通过索引取值my_set[0] 会报错
列表和集合的区别
1、列表是[ ],集合是{ }
2、列表是有序的,可索引取值,集合是无序的,不可索引取值
3、列表可以放重复的元素,集合元素是唯一的,不会重复
4、集合增删改查
增
- 使用
add()
方法添加单个元素到集合中。 - 使用
update()
方法添加多个元素到集合中。
my_set = {1, 2, 3}
my_set.add(4) # 添加单个元素
my_set.update({5, 6}) # 添加多个元素
print(my_set) # 输出:{1, 2, 3, 4, 5, 6}
删
- 使用
remove()
方法删除指定的元素。如果元素不存在,会引发KeyError
错误 - 使用
discard()
方法删除指定的元素。如果元素不存在,不会引发错误 - 使用
pop()
方法删除并返回集合中的任意一个元素
my_set = {1, 2, 3, 4, 5, 6}
my_set.remove(4) # 删除指定元素
my_set.discard(5) # 删除指定元素
print(my_set) # 输出:{1, 2, 3, 6}
popped_element = my_set.pop() # 删除并返回任意一个元素
print(popped_element) # 输出:1
clear() 也可以清空集合
改
集合中的元素是不可变的,所以不能进行修改
查
同样,集合无序的,所以也无法查询
不过我们可以通过in
方法键字可以判断一个元素是否存在于集合中,如果有返回true,否则返回False
my_set = {1, 2, 3, 4, 5}
print(3 in my_set) # 输出:True
print(6 in my_set) # 输出:False
5、集合常见方法
len(set)
代码语言:javascript复制my_set = {1, 2, 3, 4, 5}
print(len(my_set)) # 5
max(set)
代码语言:javascript复制my_set = {1, 2, 3, 4, 5}
print(max(my_set)) # 5
min(set)
代码语言:javascript复制my_set = {1, 2, 3, 4, 5}
print(min(my_set)) # 1
如果集合中有不可比较的元素,会提示报错
6、集合的交集,并集,差集
union()
返回两个集合的并集。合并并去重
代码语言:javascript复制# union
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1.union(set2))
# 输出结果
{1, 2, 3, 4, 5}
intersection()
返回两个集合的交集,共同的元素
代码语言:javascript复制intersectionset1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1.intersection(set2))
# 输出结果{3}
difference()
从源集合中找出目标集合中没有的元素集合
代码语言:javascript复制a= {1, 2, 3, 4}
b = {2, 3, 5}
print(a.difference(b))
# 输出结果{1, 4}
day09练习
初级
1.创建一个空集合
2.声明一个集合computer,包含如下元素computer = {"apple", "xiaomi", "huawei"}
3.计算2题中集合的长度并且打印输出
4.添加"vivo"到集合computer中
5.一次添加"oppo","meizu"到集合computer中
6.使用两种方法在集合computer移除一家公司,remove()
和discard()
,两者之间有什么不同?
中级
有a集合和b集合,信息如下:
代码语言:javascript复制string1 = "hello"
string2 = "world"
1.连接a集合和b集合,并输出新集合
2.找出a集合和b集合的交集
3.找出a集合在b集合中没有的集合元素
高级
1.有如下两个字符串,找出如下字符串中共同包含的字符,输出打印
代码语言:javascript复制string1 = "hello"
string2 = "world"
2.有如下字符串,找出该字符串唯一的单词集合,并且输出唯一的单词列表
代码语言:javascript复制string = 'I am astring and I am anotherstring and I am the laststring'
3.有如下列表,找好该列表中每个元素及其出现的次数。(可学完循环和判断在做该题)
List = [1, 2, 2, 3, 3, 3, 4, 5]
要求:以字典的形式输出,比如输出:{1: 3, 2: 1, 3: 2
}