在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()

猜你喜欢:

1.python列表推导式

2.python字典推导式

3.python 匿名函数lambda

4.python map函数

转载请注明:猿说Python » python set集合

技术交流、商务合作请直接联系博主
扫码或搜索:猿说python
猿说python
微信公众号 扫一扫关注

python set集合(16)的更多相关文章

  1. Python 3 集合基础和概念!

    Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...

  2. Python的集合

    1. Python的集合 1.1 集合的定义 在Python中, 集合set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.Python中的集合set类 ...

  3. Python 操作集合

    Python 操作集合 集合,set,主要用于数据的关系测试和去重处理,和列表类似,可以存储数据,列表中可以存储重复的数据,但是如果转化为集合之后,数据就会进行去重,然后保留唯一值:关系测试就是求多个 ...

  4. Centos6.10 安装Python 2.7.16

    部署一个程序, 系统环境:CentOS 6.10 64位 Python版本:2.7 1.升级下系统 yum install eple-release -y yum update -y 2.下载pyth ...

  5. Python中集合set()的使用及处理

    在Python中集合(set)与字典(dict)比较相似,都具有无序以及元素不能重复的特点 1.创建set 创建set需要一个list或者tuple或者dict作为输入集合 重复的元素在set中会被自 ...

  6. 《Think Python》第16章学习笔记

    目录 <Think Python>第16章学习笔记 16.1 Time 16.2 纯函数(Pure functions) 16.3 修改器(Modifiers) 16.4 原型 vs. 方 ...

  7. Python:集合操作总结

    集合是一组无序排列的不重复元素集 [注]:集合的最大作用是对一个序列进行去重操作 一.集合的分类 在Python中集合分为两类,为可变集合(set)和不可变集合(frozenset).对于可变集合(s ...

  8. python 的集合 set()操作

      Python 的集合 set(),是一个无序不重复元素集,可以用于关系测试和消除重复元素.     有以下运算:   1.创建一个set ()集合:   2.add:增加集合元素   3.clea ...

  9. (十三)python 3 集合

    定义: 1.不同元素组成 2.无序 3.集合中的元素必须是不可变类型 创建集合 s = {1,2,3,4,5,6,7,8} 1.定义可变集合 >>> set_test = set(' ...

随机推荐

  1. PostgreSQL 学习手册-模式Schema

    一个数据库包含一个或多个命名的模式,模式又包含表.模式还包含其它命名的对象,包括数据类型.函数,以及操作符.同一个对象名可以在不同的模式里使用而不会导致冲突: 比如,schema1和myschema都 ...

  2. bzoj 3420: Poi2013 Triumphal arch 树形dp+二分

    给一颗树,$1$ 号节点已经被染黑,其余是白的,两个人轮流操作,一开始 $B$ 在 $1$ 号节点,$A$ 选择 $k$ 个点染黑,然后 $B$ 走一步,如果 $B$ 能走到 $A$ 没染的节点则 $ ...

  3. 搭建自己的博客(六):添加首页,使用css对界面做美化

    之前优化了一些代码,但是之前进入首页直接进入了博客列表,今天添加了首页,以区分和博客的区别,并且使用css代码美化了之前的一些东西. 1.变化的部分,先上图:(蓝色表示修改,红色表示新增)

  4. yii2.0场景的简单使用

    一.规则中使用场景规则场景的使用模型层public function rules(){ return [ [['name','product_id'],'required','on'=>'add ...

  5. 【转】使用 Ansible 实现数据中心自动化管理

    长久以来,IT 运维在企业内部一直是个耗人耗力的事情.随着虚拟化的大量应用.私有云.容器的不断普及,数据中心内部的压力愈发增加.传统的自动化工具,往往是面向于数据中心特定的一类对象,例如操作系统.虚拟 ...

  6. P1025 数的划分——简单题刷傻系列

    P1025 数的划分 学傻了,学傻了,什么dp搜索什么啊: #include<cstdio> #include<cstring> #include<algorithm&g ...

  7. 命令行启动模块的Python代码研究

    pyrasite的 __requires__ = 'pyrasite==2.0' import re import sys from pkg_resources import load_entry_p ...

  8. 《Glibc内存管理》笔记DAY1

    目录 x86_64栈和mmap固定映射地址 内存的延迟分配 内核数据结构 mm_struct Heap 操作相关函数 Mmap 映射区域操作相关函数 内容来源 x86_64栈和mmap固定映射地址   ...

  9. SurfaceView动态背景效果实现

    package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.*; imp ...

  10. Canvas恢复布局

    package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.Canvas ...