集合(set)是一个无序不重复元素的序列。

基本功能是进行成员关系测试和删除重复元素。

1、集合的作用

  • 它可以把一个列表中重复的数据去掉,而不需要你再写判断
  • 可以做关系测试,比如说有两个科目,一个数学,一个是化学,想找出来既学习了数学又学习了化学的同学,就可以用集合

2、集合的定义:

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

创建格式:

parame = {value01,value02,...}
或者
set(value)

实例:

>>> set_one = {1,2,3,4,5,6}
>>> type(set_one)
<type 'set'>
>>> set_two = set([1,2,3,4])
>>> type(set_two)
<type 'set'>
>>> print set_one
set([1, 2, 3, 4, 5, 6])
>>> print set_two
set([1, 2, 3, 4])
>>>

3、集合的添加

添加集合有两种方式,一种是通过add方法添加,另外一种就是通过updata方法加入;

集合add方法:是把要传入的元素做为一个整个添加到集合中,例如:

>>> a = set("boy")
>>> a
set(['y', 'b', 'o'])
>>> a.add("girl")
>>> a
set(['y', 'girl', 'b', 'o'])
>>>

集合updata方法:是把要传入的元素拆分,做为个体传入到集合中,例如:

>>> a = set("boy")
>>> a
set(['y', 'b', 'o'])
>>> a.update("girl")
>>> a
set(['b', 'g', 'i', 'l', 'o', 'r', 'y'])
>>>

4、集合的删除

集合删除操作方法:

remove:删除元素,如果元素不存在会报错

>>> a
set(['b', 'g', 'i', 'l', 'o', 'r', 'y'])
>>> a.remove('y')
>>> a
set(['b', 'g', 'i', 'l', 'o', 'r'])
>>>

集合删除操作方法:

pop:删除一个随机的元素,并返回删除的元素

>>> a = {1,2,3,4,5}
>>> a
set([1, 2, 3, 4, 5])
>>> a.pop()
1
>>> a
set([2, 3, 4, 5])
>>>

集合删除操作方法:

discard:如果删除的元素存在,删除,不存在不做处理

>>> a = {1,2,3,4,5}
>>> a
set([1, 2, 3, 4, 5])
>>> a.discard(4)
>>> a
set([1, 2, 3, 5])
>>> a.discard(6)
>>> a
set([1, 2, 3, 5])
>>>

5、集合运算

取差集:在list中存在,在list2中没有的

>>> list = {1,2,3,4,5}
>>> list2 = {4,5,3,6,7}
>>> list-list2
set([1, 2])
>>>

取交集:就是取list1和list2中都有的

>>> list
set([1, 2, 3, 4, 5])
>>> list2
set([3, 4, 5, 6, 7])
>>> list & list2
set([3, 4, 5])
>>>

取并集:也就是把list1和list2合并了,然后去除重复的

>>> list
set([1, 2, 3, 4, 5])
>>> list2
set([3, 4, 5, 6, 7])
>>> list | list2
set([1, 2, 3, 4, 5, 6, 7])
>>>

通过intersection取交集

>>> list
set([1, 2, 3, 4, 5])
>>> list2
set([3, 4, 5, 6, 7])
>>> list.intersection(list2)
set([3, 4, 5])
>>>

通过union取并集

>>> list
set([1, 2, 3, 4, 5])
>>> list2
set([3, 4, 5, 6, 7])
>>> list.union(list2)
set([1, 2, 3, 4, 5, 6, 7])
>>>

通过difference取差集

>>> list
set([1, 2, 3, 4, 5])
>>> list2
set([3, 4, 5, 6, 7])
>>> list.difference(list2)
set([1, 2])
>>>

通过symmetric_difference取对称差集,即除去交集元素后的所有元素

 a = ['','','','']
b = ['','','','']
a = set(a)
b = set(b)
res =a.symmetric_difference(b)
res1 = a^b
print(res,res1) 运行结果:
{'', '', '', ''} {'', '', '', ''}

6、方法的判断

>>> list1 = {1,2,3,4,5,6,9}
>>> list2 = {1,2,3,6,1}
>>> list3 = {1,2,3}

issubset:判断list3是否是list1的子集

>>> #判断list3是否是list1的子集
... list3.issubset(list1)
True
>>>

issuperset:判断list1是否是list3的父集

>>> #判断list1是否是list3的父集
... list1.issuperset(list2)
True
>>>

isdisjoint:判断list1和list3是否有交集,有交集返回false,没有交集返回true

>>> #判断list1和list3是否有交集
... list1.isdisjoint(list2)
False

symmetric_difference:对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉

>>> list1.symmetric_difference(list2)
set([4, 5, 9])

Python学习笔记(八)—集合的学习的更多相关文章

  1. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  2. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

  3. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  4. Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  5. Go语言学习笔记八: 数组

    Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

  6. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  7. Java学习笔记之---集合

    Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...

  8. Redis学习笔记八:集群模式

    作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...

  9. Java IO学习笔记八:Netty入门

    作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...

  10. Vue学习笔记-Vue.js-2.X 学习(三)===>组件化高级

    (四) 组件化高级 1.插槽(slot)的基本使用 A:基本使用: <slot></slot> B:默认置:<slot><h1>中间可以放默认值< ...

随机推荐

  1. Robotium测试套管理测试用例

    前提:已写好测试用例 新建个测试套MyTestSuite管理你需要跑的测试用例,或者将相同功能的测试用例归纳到一个测试套中 package com.robotium.test.testsuite; i ...

  2. css同时满足两个类名才有效果的写法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  3. MySQL基础 - 视图

    创建视图: 假设要将posts表的前十条数据作为视图 mysql> CREATE VIEW view_test AS SELECT * FROM POSTS LIMIT 10; 使用: 可以把视 ...

  4. TObject、TPersisent 、TComponent、TControl、TGraphicControl、TWinControl 关系图

    VCL的类图结构               TObject                 |               TPersisent                 |         ...

  5. SQL Case when 的使用方法 (转)

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  6. Sqlserver双机热备文档(无域)

    1. 配制环境 OS:Win7    DB:SQL Server R2 2. 基本配制 1.      开启sqlServer服务如下图-1 图-1 2.      开启sqlServer的tcp/i ...

  7. python2.7

    python2.7支持win32.win64 下载地址:http://pan.baidu.com/s/1dE39eQ9 初学,附一个牛人的python教程地址:http://www.liaoxuefe ...

  8. Winafl学习笔记

    最近在跟师傅们学习Winafl,也去搜集了一些资料,有了一些自己的理解,就此记录一下. Winafl是一个运行时插桩工具,可以提高crash的捕获率. 同时也有自己的遗传算法,可以根据代码覆盖程度进行 ...

  9. chmod g+s 、chmod o+t 、chmod u+s:Linux高级权限管理

    关于linux下权限操作chmod的一些说明!比rxw高级内容! 转载自http://blog.chinaunix.net/uid-26642180-id-3378119.html Set uid, ...

  10. Android Studio 升级为3.1 踩到的坑

    原文:https://blog.csdn.net/xiariluoxue/article/details/80050700 AndroidStudio.gradle.buildToolsVersion ...