集合的特点
Python中的集合类型数据结构是将各不相同的不可变数据对象无序地集中起来的容器,就像是将值抽离,仅存在键的字典。类似于字典中的键,集合中的元素都是不可重复的,并且是属于不可变类型,元素之间没有排列顺序。集合的这些特性,使得它独立于序列和映射类型之外,Python中的集合类型就相当于数学集合论中所定义的集合,人们可以对集合对象进行数学集合运算(并集、交集、差集等)。
集合中的元素是唯一的,重复的元素会被自动忽略。
集合是无序的,元素没有固定的位置。
集合中的元素必须是可哈希的,因此,只能包含不可变对象,如数字、字符串、元组等
可变集合
使用花括号创建可变集合
可变集合对象是可变的,可对其进行元素的增添、删除等处理,处理结果直接作用在对象上。使用花括号可以创建可变集合,这里与创建字典不同,传入的不是键值对,而是集合元素,注意,传入的元素对象必须是不可变的,即不能传入列表、字典甚至可变集合等。另外,可变集合的set函数能够将数据结构对象转换为可变集合类型,即将集合元素存储为一个列表或元组,再使用set函数转换为可变集合。在创建时,无须担心传入的元素是否重复,因为结果会将重复元素删除。若需要创建空集合,只能使用set 函数不传入任何参数进行创建。
| |
| set1 = {'A','C','D','B','A','B'} |
使用函数创建可变集合
| |
| set2 = set([2,3,1,4,False,2.5,'one']) |
创建空的可变集合
可变集合的用法
1、集合主要用于元素去重、成员关系测试(in/not in)、删除数据项等。
2、用于元素去重,例如可以把含有重复元素的列表list1通过list(set(list1)的方式实现自动去重,当然list1的元素一定是不可变类型才能用set函数转换。
3、因为元素无序,因此:
(1)不能访问,不能用索引或下标访问单个元素,只能整体打印输出;
(2)因为不能用索引或下标访问单个元素,因此无法对可变集合中的元素进行值的修改,只能增删元素,无法修改元素;
(3)输出的顺序可以与创建时的顺序不同
向集合中添加一个元素
| set1 = {"apple", "banana", "cherry"} |
| set1.add("dog") |
| print(set1) |
向集合中添加多个元素
| set1 = {"apple", "banana", "cherry"} |
| set2 = {"google", "run", "apple"} |
| lst2 = ["jack", "alex", "jack"] |
| dic2 = {"湖北": "武汉", "湖南": "长沙", "广东": "广州"} |
| tup2 = ("张三", "李四", "小明", "小红", "李四") |
| |
| set1.update(set2) |
| |
| set1.update(lst2) |
| |
| set1.update(dic2) |
| |
| set1.update(tup2) |
删除可变集合中的元素
| set1 = {"apple", "banana", "cherry"} |
| set1.discard("apple") |
| set1.remove("apple") |
| variable = set1.pop() |
| set1.clear() |
集合间的数学运算
交集运算
| set1 = {"apple", "banana", "cherry"} |
| set2 = {"google", "run", "apple"} |
| |
| variable = set1 & set2 |
| |
| variable = set1.intersection(set2) |
补集运算
| set1 = {"apple", "banana", "cherry"} |
| set2 = {"google", "run", "apple"} |
| |
| variable = set1 ^ set2 |
| variable = set1.symmetric_difference(set2) |
差集运算
| set1 = {"apple", "banana", "cherry"} |
| set2 = {"google", "run", "apple"} |
| |
| variable = set1 - set2 |
| variable = set1.difference(set2) |
| |
| set1.difference_update(set2) |
| |
| |
| variable = set2 - set1 |
| variable = set2.difference(set1) |
| |
| set2.difference_update(set1) |
并集运算
| set1 = {"apple", "banana", "cherry"} |
| set2 = {"google", "run", "apple"} |
| variable = set1 | set2 |
| variable = set1.union(set2) |
集合间的判断
判断两个集合是否相交
| set1 = {"apple", "banana", "cherry"} |
| set2 = {"google", "run", "apple"} |
| |
| variable = set1.isdisjoint(set2) |
判断A是否是B的子集
| set1 = {"apple", "banana", "cherry"} |
| set2 = {"banana", "cherry", "google", "run", "apple"} |
| |
| variable = set1.issubset(set2) |
判断A是否是B的父集
| set1 = {"apple", "banana", "cherry"} |
| set2 = {"banana", "cherry", "google", "run", "apple"} |
| |
| variable = set2.issuperset(set1) |
不可变集合
不可变集合对象属于不可变数据类型,不能对其中的元素进行修改处理。创建不可变集合的方法是使用frozenset函数。它与set函数用法一样,不同的是得出的结果是一个不可变集合。注意,元素必须为不可变数据类型。使用不可变集合作为元素,当frozenset函数不传入任何参数时,则会创建一个空不可变集合frozenset 是不可变的,一旦创建就不能修改。
使用函数创建不可变集合
| |
| set1 = frozenset([3,2,3,'one',frozenset([1,2]),True]) |
创建空的不可变集合
| |
| empty_frozenset = frozenset() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!