一、概述

  集合(set)是一种无序且不重复的序列。

  无序不重复的特点决定它存在以下的应用场景:

  • 去重处理
  • 关系测试

差集、并集、交集等,下文详述。

二、创建集合

  创建集合的方法与创建字典类似,但没有键值对的概念,具体如下:

  s1 = {11,22,33}

  还可以通过以下两种方法创建:

   s2 = set()

   s3 = set([11,22,33])

  这两种方法本质上是同一种,都是通过调用系统的set()方法进行参数传递和类型转换,如果不传入参数则直接new一个空的集合;如果传入的参数有重复的元素则直接去重处理。

三、集合的常见函数用法

3.1 元素对象常见操作

  • add()
    添加一个元素到指定的集合,每次只能添加一个。

    s1 = {"Java", "PHP", "C++"}
    print(s1)
    s1.add("Python")
    print(s1) 输出:
    {'C++', 'PHP', 'Java'}
    {'C++', 'Python', 'PHP', 'Java'}
  • remove()
    删除集合中指定的对象,一次只能删除一个,如果该对象不存在则报错。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s1.remove("C++")
    print(s1)
    s1.remove("C#") #移除不存在的对象 输出:
    Traceback (most recent call last):
    File "D:/python/S13/Day3/set.py", line 8, in <module>
    s1.remove("C#")
    KeyError: 'C#'
    {'Java', 'PHP', 'Python'} #第一次成功移除C++,C#不存在,移除时报错
  • discard()
    与remove()类似,也是删除指定的对象,一次只能删除一个,但是如果该对象不存在时不报错。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s1.discard("C++")
    s1.discard("C#")
    print(s1) 输出:
    {'Python', 'PHP', 'Java'}
  • pop()
    删除集合中任意一个对象,注意不能指定。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s1.pop()
    print(s1) 输出:
    运行多次会发现输出的s1不固定
  • clear()
    清空集合。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s1.clear()
    print(s1)
    print(len(s1)) 输出:
    set()
    0

3.2 关系测试常见操作 

  关系测试常用于对两个集合的关系判定。

  • difference() 
    语法结构:  set1.difference(set2)或set1 - set2

    差集关系运算,以新的set集合形式返回set1中包含,但在set2中不存在的元素集合(不影响原set1和set2)。

    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'Shell', 'Ruby'}
    print(s1.difference(s2))
    print(s1 - s2)
    print(s1)
    print(s2) 输出:
    {'PHP', 'Python', 'C++'}
    {'PHP', 'Python', 'C++'}
    {'PHP', 'Python', 'C++', 'Java'}
    {'Shell', 'Java', 'Ruby'} 
  • issubset()
    语法结构:  set1.issubset(set2)
    判断集合set1是否为set2的子集,返回布尔值。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'Shell', 'Ruby'}
    print(s1.issubset(s2)) 输出:
    False
  • issuperset()
    语法结构:  set1.issuperset(set2)
    判断set1是否为set2的父集。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'C++'}
    print(s1.issuperset(s2)) 输出:
    True
  • isdisjoint()
    语法结构:  set1.isdisjoint(set2)
    判断set1和set2是否存在交集, 如果不存在返回True, 存在则返回False.
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'C++'}
    s3 = {'GO'}
    print(s1.isdisjoint(s2))
    print(s1.isdisjoint(s3)) 输出:
    False
    True
  • symmetric_difference()
    语法结构:set1.symmetric_difference(set2)或set1 ^ set2
    返回set1和set2的对称式差集,相当于执行set1.difference(set2)和set2.difference(set1),以新的set集合形式返回set1和set2中差异部分元素(不在两者中同时存在)集合(仅在set1和set2中出现过一次的元素不影响原set1和set2)。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'Shell', 'Ruby'}
    print(s1.symmetric_difference(s2))
    print(s1 ^ s2) 输出:
    {'PHP', 'Ruby', 'Shell', 'C++', 'Python'}
    {'PHP', 'Ruby', 'Shell', 'C++', 'Python'}
  • symmetric_difference_update()
    语法结构:set1.symmetric_difference(set2)
    返回set1和set2的对称式差集,并覆盖更新原set1集合(原来被调用操作的对象),即执行set1 = set1.symmetric_difference(set2)
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'Shell', 'Ruby'}
    print(s1.symmetric_difference(s2))
    s1.symmetric_difference_update(s2)
    print(s1) 输出:
    {'PHP', 'C++', 'Shell', 'Python', 'Ruby'}
    {'Python', 'Shell', 'Ruby', 'PHP', 'C++'}
  • intersection()
    语法结构:  set1.intersection(set2)或set1 & set2
    交集运算,以set方式返回set1和set2的交集部分(同时存在的元素),不影响原集合set1和set2.
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'Shell', 'Ruby'}
    print(s1.intersection(s2)) 输出:
    {'Java'}
  • intersection_update()
    语法结构:  set1.intersection_update(set2)
    执行交集运算,并将结果覆盖更新原集合set1(原来被调用操作的对象)。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'Shell', 'Ruby'}
    s1.intersection_update(s2)
    print(s1) 输出:
    {'Java'}
  • union()
    语法结构:  set1.union(set2)或set1 | set2
    执行并集计算,合并set1和set2中的对象并做去重处理,最后以集合形式返回结果。
    综合上述关系运算函数,可确定并集计算相当于对称差集与交集的并集计算,即合并重复重现的对象和不重复出现的对象,set1.union(set2) = (set1.symmetric_difference(set2)).union(set1.intersection(set2))
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'Shell', 'Ruby'}
    print(s1.union(s2)) 输出:
    {'Shell', 'PHP', 'Ruby', 'C++', 'Python', 'Java'}
  • update()
    语法结构:  set1.update(obj)
    往集合中批量添加元素,添加的对象必须是可以迭代的对象(当然如果原集合中存在与迭代对象中重复的元素会做去重处理),本质上是通过循环,把传入的迭代对象逐个添加更新到原集合中。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'Shell', 'Ruby'}
    s1.update(s2)
    print(s1) 输出:
    {'Python', 'Ruby', 'Shell', 'C++', 'Java', 'PHP'}
  • in 或not in
    成员运算函数同样适用于集合,最后返回布尔值。
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    print('Java' in s1)
    if 'Go' in s1:
    print("OK")
    else:
    print("Not OK") 输出:
    True
    Not OK
  • <=
    语法结构:  set1 <= set2
    判断set1中的每个元素是否都在set2中,即判断set1是否为set2的子集,等同于set1.issubset(set2)
    s1 = {'Java', 'PHP', 'Python', 'C++'}
    s2 = {'Java', 'Shell', 'Ruby'}
    s3 = s1.union(s2)
    print(s1 <= s2)
    print(s1.issubset(s2))
    print(s1 <= s3)
    print(s1.issubset(s3)) 输出:
    False
    False
    True
    True

3.3 关系测试运算符

  常见的关系测试运算符如下:

s1 = {'Java', 'PHP', 'Python', 'C++'}
s2 = {'Java', 'Shell', 'Ruby'}
print(s1 - s2)
print(s1.difference(s2))
print("")
print(s1 & s2)
print(s1.intersection(s2))
print("")
print(s1 | s2)
print(s1.union(s2))
print("")
print(s1 ^ s2)
print(s1.symmetric_difference(s2))
print("")
print(s1 <= s2)
print(s1.issubset(s2)) 输出:
{'C++', 'PHP', 'Python'}
{'C++', 'PHP', 'Python'} {'Java'}
{'Java'} {'C++', 'Python', 'Shell', 'Ruby', 'Java', 'PHP'}
{'C++', 'Python', 'Shell', 'Ruby', 'Java', 'PHP'} {'C++', 'Shell', 'Python', 'Ruby', 'PHP'}
{'C++', 'Shell', 'Python', 'Ruby', 'PHP'} False
False

Python学习之路day3-集合的更多相关文章

  1. python学习之路-day3

    本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数 ==================================== 一.集合操作 集合是一个无序的,不重复的数据组合,它的主要 ...

  2. ql的python学习之路-day3

    字典操作 特性: 1.无序的 2.key是唯一的 , ,,], ,,], ,,], }, ,,], 'bbb' : ['a', 'b', 'c'], }}

  3. python学习博客地址集合。。。

    python学习博客地址集合...   老师讲课博客目录 http://www.bootcdn.cn/bootstrap/  bootstrap cdn在线地址 http://www.cnblogs. ...

  4. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  5. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  6. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  7. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  8. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  9. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  10. python 学习之路开始了

    python 学习之路开始了.....记录点点滴滴....

随机推荐

  1. leetcode 136 Single Number, 260 Single Number III

    leetcode 136. Single Number Given an array of integers, every element appears twice except for one. ...

  2. this逃逸

    首先,什么是this逃逸? this逃逸是指类构造函数在返回实例之前,线程便持有该对象的引用. 常发生于在构造函数中启动线程或注册监听器. eg: public class ThisEscape { ...

  3. csharp编写界面,opencv编写类库,解决 Pinvoke过程中的参数传递和平台调用问题

        使用csharp 编写winform程序,不仅速度快,而且容易界面美化并找到其他类库的支持:而使用 opencv编写图形图像处理程序,是目前比较流行,而且高效的一种方法.如果需要将两者结合,需 ...

  4. 20145220韩旭飞《网络对抗》Exp8 Web基础

    20145220韩旭飞<网络对抗>Exp8 Web基础 Web前端:HTML基础 首先,我们的Web开发是基于Apache服务器进行的,所以对于Apache的基本操作我们是应该要掌握的,对 ...

  5. 20145324王嘉澜《网络对抗技术》Web基础

    实践要求 ①Web前端HTML: 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML ②Web前端javascipt: 理解JavaScript ...

  6. tf.equal的使用

    tf.equal(A, B)是对比这两个矩阵或者向量的相等的元素,如果是相等的那就返回True,反正返回False,返回的值的矩阵维度和A是一样的 import tensorflow as tf im ...

  7. 【Map】Echarts之iphone销量地图的使用以及详细配置

    1.引入echarts库文件 <script charset="utf-8" type="text/javascript" language=" ...

  8. C#学习笔记(十九):字典

    自定义泛型 泛型类,第一替代符T,第二替代符U using System; using System.Collections.Generic; using System.Linq; using Sys ...

  9. HDU 5963 朋友(找规律博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=5963 题意: 思路: 我们可以先只考虑单链,自己试几种案例就可以发现规律,只有与根相连的边为1时,只需要奇数次操 ...

  10. HDU 1686 Oulippo

    http://acm.hdu.edu.cn/showproblem.php?pid=1686 题意:给定一个文本串和给定一个模式串,求文本串中有几个模式串. 思路:直接套用KMP模板. #includ ...