在python变量中除了以前文章所提到的整形int / 浮点数float / 布尔值bool / 列表list / 字典dict 之外,还有一个类型我们还没有做详细介绍,这个变量类型就是集合set。
钟山ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
一.set集合简介
python set集合使用大括号 { }表示,与字典dict不同的是set集合并没有key/value键值对,主要有以下两个特点:
1.元素不允许重复
2.set 不记录元素的添加顺序,即是无序的,和字典类似
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # !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) |
输出结果:
1 2 3 4 5 6 7 8 | set() ************************************************************ {False,'猿说python'} ************************************************************ {'name':'猿说python','url':'www.shuopython.com'} |
代码分析:观察上面代码,虽然字典dict 和 集合set 都是由{}构成,注意字典由键值对key/value构成,而集合确是由一个一个数据构成,和列表的元素类似!
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() — 用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | # 使用花括号构建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集合是否包含'乔峰'字符串:",("乔峰"inc))# 输出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) |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 集舍的交集。
^:计算两个集合异或的结果,就是用两个集合的并集减去交集的元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # 使用花括号构建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) |
输出结果:
1 2 3 4 5 6 7 8 | 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() |