python set集合(16)
在python变量中除了以前文章所提到的整形int / 浮点数float / 布尔值bool / 列表list / 字典dict 之外,还有一个类型我们还没有做详细介绍,这个变量类型就是集合set。
一.set集合简介
python set集合使用大括号 { }表示,与字典dict不同的是set集合并没有key/value键值对,主要有以下两个特点:
1.元素不允许重复
2.set 不记录元素的添加顺序,即是无序的,和字典类似
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解忧 @Blog(个人博客地址): shuopython.com @WeChat Official Account(微信公众号):猿说python @Github:www.github.com @File:python_set.py @Time:2019/11/09 21:25 @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! """ # 创建一个空集合set set_a = set() # 打印集合set print(set_a) # 查看类型 print(type(set_a)) print("***"*20) # 创建一个集合 set_b = {"猿说python",False} print(type(set_b)) print(set_b) print("***"*20) # 创建一个字典 dict_b = {"name":"猿说python","url":"www.shuopython.com"} print(type(dict_b)) print(dict_b)
输出结果:
set() <class 'set'> ************************************************************ <class 'set'> {False, '猿说python'} ************************************************************ <class 'dict'> {'name': '猿说python', 'url': 'www.shuopython.com'}
代码分析:观察上面代码,虽然字典dict 和 集合set 都是由{}构成,注意字典由键值对key/value构成,而集合确是由一个一个数据构成,和列表的元素类似!
二.set集合常用函数
add() — 向 set 集合中添加元素;
remove() — 删除元素,如果集合中不包含被删除的元素,remove() 方法会报出 KeyError 异常;
discard() — 删除元素,如果集合中不包含被删除的元素,不会有任何提示或者 异常;
clear() — 就是清空白 set 集合;
copy() — 拷贝一个集合;
difference() — 返回多个集合的差集;
difference_update() — 移除集合中的元素,该元素在指定的集合也存在;
intersection() — 返回集合的交集,不改变集合本身,而是返回两个集合的交集;
intersection_update() — 返回集合的交集,会通过交集运算改变第一个集合;
isdisjoint() — 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False;
issubset() — 判断指定集合是否为该方法参数集合的子集;
issuperset() — 判断该方法的参数集合是否为指定集合的子集;
pop() — 随机移除元素;
symmetric_difference() — 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中;
union() — 返回两个集合的并集;
update() — 用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略;
# 使用花括号构建set集合 c = {'乔峰',"段誉","虚竹","天龙八部","射雕英雄传"} # 添加元素 c.add("天山姥姥") c.add(6) print("c集合的元素个数为:" , len(c)) print(c) # 删除指定元素 c.remove("天山姥姥") print(c) print("c集合的元素个数为:" , len(c)) print("***"*20) # 判断是否包含指定字符串 print("c集合是否包含'乔峰'字符串:" , ("乔峰" in c)) # 输出True print("***"*20) # 使用set()函数(构造器)来创建set集合 movies = set() movies.add("天龙八部") movies.add("射雕英雄传") print("movies集合的元素:" , movies) # issubset()方法判断是否为子集合 print("movies集合是否为c的子集合?", movies.issubset(c)) # 输出False # issuperset()方法判断是否为父集合 # issubset和issuperset其实就是倒过来判断 print("c集合是否完全包含books集合?", c.issuperset(movies)) # 输出False # 用c集合减去books集合里的元素,不改变c集合本身 result1 = c - movies print(result1) # difference()方法也是对集合做减法,与用-执行运算的效果完全一样 result2 = c.difference(movies) print(result2) # 用c集合减去books集合里的元素,改变c集合本身 c.difference_update(movies) print("c集合的元素:" , c) # 删除c集合里的所有元素 c.clear() print("c集合的元素:" , c) print("***"*20) # 直接创建包含元素的集合 d = {"python面向对象", 'python基础', 'python爬虫'} print("d集合的元素:" , d) # intersection()方法也是获取两个集合的交集,与用&执行运算的效果完全一样 inter2 = d.intersection(movies) print(inter2) # 计算两个集合的交集,改变d集合本身 d.intersection_update(movies) print("d集合的元素:" , d) print("***"*20) # 将range对象包装成set集合 e = set(range(5)) f = set(range(3, 7)) print("e集合的元素:" , e) print("f集合的元素:" , f) # 计算两个集合的并集,不改变e集合本身 un = e.union(f) print('e和f执行并集的结果:', un) # 计算两个集合的并集,改变e集合本身 e.update(f) print('e集合的元素:', e)
输出:
c集合的元素个数为: 7 {'天龙八部', 6, '虚竹', '乔峰', '段誉', '天山姥姥', '射雕英雄传'} {'天龙八部', 6, '虚竹', '乔峰', '段誉', '射雕英雄传'} c集合的元素个数为: 6 ************************************************************ c集合是否包含'乔峰'字符串: True ************************************************************ movies集合的元素: {'天龙八部', '射雕英雄传'} movies集合是否为c的子集合? True c集合是否完全包含books集合? True {'乔峰', '段誉', 6, '虚竹'} {'乔峰', '段誉', 6, '虚竹'} c集合的元素: {6, '虚竹', '乔峰', '段誉'} c集合的元素: set() ************************************************************ d集合的元素: {'python爬虫', 'python基础', 'python面向对象'} set() d集合的元素: set() ************************************************************ e集合的元素: {0, 1, 2, 3, 4} f集合的元素: {3, 4, 5, 6} e和f执行并集的结果: {0, 1, 2, 3, 4, 5, 6} e集合的元素: {0, 1, 2, 3, 4, 5, 6}
三.set集合运算符
<=:相当于调用 issubset() 方法,判断前面的 set 集合是否为后面的 set 集合的子集合。
>=:相当于调用 issuperset() 方法,判断前面的 set 集合是否为后面的 set 集合的父集合。
–:相当于调用 difference() 方法,用前面的 set 集合减去后面的 set 集合的元素。
&:相当于调用 intersection() 方法,用于获取两个 set 集舍的交集。
^:计算两个集合异或的结果,就是用两个集合的并集减去交集的元素。
# 使用花括号构建set集合 c = {'乔峰',"段誉","虚竹","天龙八部","射雕英雄传"} # 使用set()函数(构造器)来创建set集合 movies = set() movies.add("天龙八部") movies.add("射雕英雄传") print("movies集合的元素:" , movies) # issubset()方法与<=运算符效果相同 print("movies集合是否为c的子集合?", (movies <= c)) # 输出False print("***"*20) e = set(range(5)) f = set(range(3, 7)) print("e集合的元素:" , e) print("f集合的元素:" , f) # 对两个集合执行异或运算 xor = e ^ f print('e和f执行xor的结果:', xor) # 直接创建包含元素的集合 d = {"python面向对象", 'python基础', 'python爬虫'} print("d集合的元素:" , d) # 计算两个集合的交集,不改变d集合本身 inter1 = d & movies print(inter1)
输出结果:
movies集合的元素: {'天龙八部', '射雕英雄传'} movies集合是否为c的子集合? True ************************************************************ e集合的元素: {0, 1, 2, 3, 4} f集合的元素: {3, 4, 5, 6} e和f执行xor的结果: {0, 1, 2, 5, 6} d集合的元素: {'python基础', 'python面向对象', 'python爬虫'} set()
猜你喜欢:
转载请注明:猿说Python » python set集合
原文地址:https://www.cnblogs.com/shuopython/p/12088366.html
- 28家银行用户体验调研报告:洞见银行业的“进化论”
- 性能计数器数据收集服务
- SQL SERVER 内存分配及常见内存问题 DMV查询
- 6 利用Docker .NET应用程序模板制作您的容器应用程序(第2部分)
- Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)
- git review报错一例
- Nginx采用https加密访问后出现的问题
- 对比git rm和rm的使用区别
- Gerrit日常操作命令收集
- 轻型的ORM类Dapper
- [原创]Gerrit中文乱码问题解决方案分享
- 获奖案例:国航&百度“微笑启航”AI主题航班
- MySQL高可用架构-MMM环境部署记录
- Silverlight之ListBox/Style学习笔记--ListBox版的图片轮换广告
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法