目录
一、基本介绍
1、Python支持集合这种数据类型,集合是由不重复元素组成的无序容器
- 不重复元素:简单的说,就是集合中不会有相同的元素
- 无序:集合中元素取出的顺序,和你定义时元素顺序并不能保证一致
2、集合对象支持合集、交集、差集等数学运算
3、既然有了列表、元组这些数据容器,Python设计者为什么还提供集合这样的数据类型呢?
在项目中,我们可能有这样的需求:需要记录一些数据,而这些数据必须保证不重复的,而且数据的顺序并没有要求,就可以考虑使用集合
回顾:列表、元组的元素是可以重复,而且有序
二、集合的定义
1、集合的定义
创建一个集合,只要用逗号分隔的不同的数据项,并使用{ }括起来即可,实例如下:
set_a={100,200,300,400,500}
basket={"apple","orange","pear","banana"}
2、集合基本使用案例
# 集合基本使用案例
set_a={100,200,300,400,500}
basket={"apple","orange","pear","banana"}
print(f"set_a的内容是:{set_a} 类型是:{type(set_a)}")
# {400, 100, 500, 200, 300} <class 'set'>
三、注意事项和使用细节
1、集合是由不重复元素组成的无序容器
# 不重复元素组成,可以理解成会自动去重
basket={'apple','orange','apple','pear','orange','banana'}
print(f"basket:{basket}") # {'banana', 'pear', 'orange', 'apple'}
# 无序,也就是你定义元素的顺序和取出的顺序不能保证一致
# 集合底层会按照自己的一套算法来存储和取数据,所以每次取出顺序是不变的
set_a={100,200,300,400,500}
print(f"set_a:{set_a}") # {400, 100, 500, 200, 300}
print(f"set_a:{set_a}") # {400, 100, 500, 200, 300}
print(f"set_a:{set_a}") # {400, 100, 500, 200, 300}
2、集合不支持索引
# 集合不支持索引,会报错
set_a={100,200,300,400,500}
# print(set_a[0])
3、既然集合不支持索引,所以对集合进行遍历不支持while,只支持for
# 使用for对集合进行遍历
print("-"*30)
basket={'apple','orange','apple','pear','orange','banana'}
for ele in basket:
print(ele)
4、创建空集合只能用set(),不能用{ },{ }创建的是空字典
# 创建空集合只能用set(),不能用{ },{ }创建的是空字典
set_b={} # 这样定义空集合不对,这是一个空字典
set_c=set() # 创建空集合
print(f"set_b:{set_b} 类型:{type(set_b)}") # {} dict
print(f"set_c:{set_c} 类型:{type(set_c)}") # set() set
四、集合常用操作
1、集合常用操作
2)常用操作一览
2、演示集合常用操作
1)len(集合):集合元素个数
# 定义集合
basket={'apple','orange','apple','pear','orange','banana'}
# len(集合):集合元素个数
print("basket的元素个数:",len(basket)) # 4
2)x in s:检测 x 是否为 s 中的成员
# x in s:检测 x 是否为 s 中的成员
# 需求:判断apple是否在集合中
print("apple" in basket) # True
3)add(ele):将元素 ele 添加到集合中
# add(ele):将元素 ele 添加到集合中
# 需求:将grape添加到集合中
basket.add("grape")
print("basket的元素:",basket) #{'orange', 'grape', 'banana', 'pear', 'apple'}
4)remove(ele):从集合中移除元素ele
# remove(ele):从集合中移除元素ele
# 如果 ele 不存在于集合中,则会引发 KeyError
# 需求:将 apple 从集合中移除
basket.remove("apple")
print("basket的元素:",basket) # {'pear', 'grape', 'orange', 'banana'}
5)pop():从集合中移除并返回任意一个元素
# pop():从集合中移除并返回任意一个元素
# 如果集合为空,则会引发 KeyError
# 需求:从集合中随机删除一个元素
ele=basket.pop()
print("ele:",ele," 类型是:",type(ele)) # ele:? pear 类型:str
# 注意 pop()操作会影响到原集合
print("basket的元素:",basket) # {'banana', 'grape', 'orange'}
6)union(*others):返回一个新集合(并集)
# union(*others):返回一个新集合(并集)
# 其中包含来自原集合以及 others 指定的所有集合中的元素
books={'天龙八部','笑傲江湖'}
books_2={'雪山飞狐','神雕侠侣','天龙八部'}
# 需求:将books和books_2进行合集操作(求出在books集合或者在books_2集合的元素)
books_3=books.union(books_2)
# books_3=books|books_2
print("books_3:",books_3) # {'笑傲江湖', '雪山飞狐', '神雕侠侣', '天龙八部'}
7)intersection(*others):返回一个新集合(交集)
# intersection(*others):返回一个新集合(交集)
# 其中包含原集合以及 others 指定的所有集合中共有的元素
# 需求:将books和books_2进行交集操作(求出既在books集合又在books_2集合的元素)
books_4=books.intersection(books_2)
# books_4=books&books_2
print("books_4:",books_4) # {'天龙八部'}
8) difference(*others):返回一个新集合(差集)
# difference(*others):返回一个新集合(差集)
# 其中包含原集合中,在others指定的其他集合中不存在的元素
books={'天龙八部','笑傲江湖'}
books_2={'雪山飞狐','神雕侠侣','天龙八部'}
# 需求:只存在books集合的元素
books_5=books.difference(books_2)
# books_5=books-books_2
print("books_5:",books_5) # {'笑傲江湖'}
# 需求:只存在books——2集合的元素
books_6=books_2.difference(books)
# books_6=books_2-books
print("books_6:",books_6) # {'雪山飞狐', '神雕侠侣'}
五、集合生成式
1、集合生成式就是"生成集合的公式"
2、基本语法
{集合元素表达式 for 自定义变量 in 可迭代对象}
3、实例说明:
{ele*2 for ele in range(1,5)} => 得到集合含有2,4,6,8这四个元素
但是集合是无序的,所以不能保证元素的顺序一定是2,4,6,8
说明:集合生成式和列表生成式的区别:集合生成式使用{ },列表生成式使用[ ]