定义:

1.不同元素组成

2.无序

3.集合中的元素必须是不可变类型

创建集合

  1. s = {1,2,3,4,5,6,7,8}

1.定义可变集合

  1. >>> set_test = set('hello')
  2. >>> set_test
  3. {'h', 'l', 'e', 'o'}

2.定义不可变集合

  1. >>> set_test = set('hello')
  2. >>> set_test
  3. {'h', 'l', 'e', 'o'}  # 由此可见集合中的元素不可重复,都是不同的
  4. >>> n_set_test = frozenset(set_test)
  5. >>> n_set_test
  6. frozenset({'h', 'l', 'e', 'o'})

集合运算

集合之间也可进行数学集合运算(例如:并集、交集等),可用相应的操作符或方法来实现。

子集

  子集,为某个集合中一部分的集合,故亦称部分集合。

  使用操作符 < 执行子集操作,同样地,也可使用方法 issubset() 完成。

  1. >>> A = set('abcd')
  2. >>> B = set('cdef')
  3. >>> C = set("ab")
  4. >>> C < A
  5. True # C 是 A 的子集
  6. >>> C < B
  7. False
  8. >>> C.issubset(A)
  9. True

并集 

  一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。

  使用操作符 | 执行并集操作,同样地,也可使用方法 union() 完成。

  1. >>> A | B
  2. {'c', 'b', 'f', 'd', 'e', 'a'}
  3. >>> A.union(B)
  4. {'c', 'b', 'f', 'd', 'e', 'a'}

交集

  两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。

  使用 & 操作符执行交集操作,同样地,也可使用方法 intersection() 完成。

  1. >>> A & B
  2. {'c', 'd'}
  3. >>> A.intersection(B)
  4. {'c', 'd'}

差集

  A 与 B 的差集是所有属于 A 且不属于 B 的元素构成的集合

  使用操作符 - 执行差集操作,同样地,也可使用方法 difference() 完成。

  1. >>> A - B
  2. {'b', 'a'}
  3. >>> A.difference(B)
  4. {'b', 'a'}

对称差

  两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。

  使用 ^ 操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。

  1. >>> A ^ B
  2. {'b', 'f', 'e', 'a'}
  3. >>> A.symmetric_difference(B)
  4. {'b', 'f', 'e', 'a'}

  

集合方法

1.add 向集合中添加元素

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.add("s")
  3. >>> s
  4. {1, 2, 3, 4, 5, 6, 's'}

2.clear 清空集合

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.clear()
  3. >>> s
  4. set()

3.copy 返回集合的浅拷贝

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> new_s = s.copy()
  3. >>> new_s
  4. {1, 2, 3, 4, 5, 6}

4.pop 删除并返回任意的集合元素(如果集合为空,会引发 KeyError)

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.pop()  # pop删除时是无序的随机删除
  3. 1
  4. >>> s
  5. {2, 3, 4, 5, 6}

5.remove 删除集合中的一个元素(如果元素不存在,会引发 KeyError)

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.remove(3)
  3. >>> s
  4. {1, 2, 4, 5, 6}

6.discard 删除集合中的一个元素(如果元素不存在,则不执行任何操作)

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s.discard("sb")
  3. >>> s
  4. {1, 2, 3, 4, 5, 6}

7.intersection 将两个集合的交集作为一个新集合返回

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s2 = {3, 4, 5, 6, 7, 8}
  3. >>> s.intersection(s2)
  4. {3, 4, 5, 6}
  5. >>> s&s2  # 可以达到相同的效果
  6. {3, 4, 5, 6}

8.union 将集合的并集作为一个新集合返回

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s2 = {3, 4, 5, 6, 7, 8}
  3. >>> print(s.union(s2))
  4. {1, 2, 3, 4, 5, 6, 7, 8}
  5. >>> print(s|s2) # 用 | 可以达到相同效果
  6. {1, 2, 3, 4, 5, 6, 7, 8}

9.difference 将两个或多个集合的差集作为一个新集合返回 

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s2 = {3, 4, 5, 6, 7, 8}
  3. >>> print("差集:",s.difference(s2)) # 去除s和s2中相同元素,删除s2 保留s中剩余元素
  4. 差集: {1, 2}
  5. >>> print("差集:",s2.difference(s))  # 去除s和s2中相同元素,删除s2 保留s2中剩余元素

  6. 差集: {8, 7}
  7. >>> print("差集:",s - s2) # 符号 - 可以达到相同结果
  8. 差集: {1, 2}
  9. >>> print("差集:",s2 - s) # 符号 - 可以达到相同结果
  10. 差集: {8, 7}

10. symmetric_difference 将两个集合的对称差作为一个新集合返回(两个集合合并删除相同部分,其余保留) 

  1. >>> s = {1, 2, 3, 4, 5, 6}
  2. >>> s2 = {3, 4, 5, 6, 7, 8}
  3. >>> s.symmetric_difference(s2)
  4. {1, 2, 7, 8}

11.update 用自己和另一个的并集来更新这个集合

  1. >>> s = {'p', 'y'}
  2. >>> s.update(['t', 'h', 'o', 'n']) # 添加多个元素
  3. >>> s
  4. {'p', 't', 'o', 'y', 'h', 'n'}
  5. >>> s.update(['H', 'e'], {'l', 'l', 'o'}) # 添加列表和集合
  6. >>> s
  7. {'p', 'H', 't', 'l', 'o', 'y', 'e', 'h', 'n'}

12.intersection_update()  用自己和另一个的交集来更新这个集合

  1. >>> s = {'a', 'b', 'c', 'd', 'q'}
  2. >>> s2 = {'c', 'd', 'e', 'f'}
  3. >>> s.intersection_update(s2) # 相当于s = s - s2
  4. >>> s
  5. {'c', 'd'}

13.isdisjoint()  如果两个集合有一个空交集,返回 True

  1. >>> s = {1, 2}
  2. >>> s1 = {3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s.isdisjoint(s1)
  5. True # s 和 s1 两个集合的交集为空返回 True
  6. >>> s.isdisjoint(s2)
  7. False # s 和 s2 两个集合的交集为 2 不是空 所有返回False

14.issubset() 如果另一个集合包含这个集合,返回 True

  1. >>> s = {1, 2, 3}
  2. >>> s1 = {1, 2, 3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s.issubset(s1)
  5. True # 因为 s1 集合 包含 s 集合
  6. >>> s.issubset(s2)
  7. False # s2 集合 不包含 s 集合

15.issuperset()  如果这个集合包含另一个集合,返回 True

  1. >>> s = {1, 2, 3}
  2. >>> s1 = {1, 2, 3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s.issuperset(s1)
  5. False # s 集合不包含 s1 集合
  6. >>> s.issuperset(s2)
  7. True # s 集合包含 s2 集合

16.difference_update() 从这个集合中删除另一个集合的所有元素

  1. >>> s = {1, 2, 3}
  2. >>> s1 = {1, 2, 3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s.difference_update(s2)
  5. >>> s
  6. {1} # s2中的2,3 s集合中也有2,3 所以保留1
  7. >>> s1.difference_update(s2)
  8. >>> s1
  9. {1, 4}

  

17.symmetric_difference_update() 用自己和另一个的对称差来更新这个集合

  1. >>> s = {1, 2, 3}
  2. >>> s1 = {1, 2, 3, 4}
  3. >>> s2 = {2, 3}
  4. >>> s1.symmetric_difference_update(s)
  5. >>> s1
  6. {4}
  7. >>> s1.symmetric_difference_update(s2)
  8. >>> s1
  9. {2, 3, 4}
  10. >>> s.symmetric_difference_update(s2)
  11. >>> s
  12. {1}

集合与内置函数

下述内置函数通常作用于集合,来执行不同的任务。

函数 描述
all() 如果集合中的所有元素都是 True(或者集合为空),则返回 True。
any() 如果集合中的所有元素都是 True,则返回 True;如果集合为空,则返回 False。
enumerate() 返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)。
len() 返回集合的长度(元素个数)
max() 返回集合中的最大项
min() 返回集合中的最小项
sorted() 从集合中的元素返回新的排序列表(不排序集合本身)
sum() 返回集合的所有元素之和

Python之集合详解的更多相关文章

  1. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息.        ...

  2. Python中dict详解

    from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...

  3. python之数据类型详解

    python之数据类型详解 二.列表list  (可以存储多个值)(列表内数字不需要加引号) sort s1=[','!'] # s1.sort() # print(s1) -->['!', ' ...

  4. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  5. Python基础知识详解 从入门到精通(七)类与对象

    本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...

  6. Python推导式详解,带你写出比较精简酷炫的代码

    Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...

  7. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  8. Python开发技术详解(视频+源码+文档)

    Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...

  9. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

随机推荐

  1. [IDEA]Java:“程序包XXX不存在”问题的三种解决方案

    ###三种方案 ####01 出现jar包找不到的问题,首先有可能是项目依赖中有些jar没有下载完整 而mvn idea:idea这个命令可以检查并继续下载未下载完整的依赖jar. 在命令行输入mvn ...

  2. Spring 标签纸property

    转载自https://www.cnblogs.com/zzb-yp/p/9968849.html Spring中XML文件配置Bean的简单示例,如下: <bean id="car&q ...

  3. Golang的Context介绍及其源码分析

    简介 在Go服务中,对于每个请求,都会起一个协程去处理.在处理协程中,也会起很多协程去访问资源,比如数据库,比如RPC,这些协程还需要访问请求维度的一些信息比如说请求方的身份,授权信息等等.当一个请求 ...

  4. Java Web学习(一)Web基础

    文章更新时间:2020/07/24 一.基本概念 web资源 Internet上供外界访问的Web资源分为两种: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态w ...

  5. xshell评估过期(已解决)

    登录英文版官网 https://www.netsarang.com/ 点击download  选择xshell 5 . 直接在页面中有红色*号的地方输入个人信息,licensetype 必须选 Hom ...

  6. pandas 使用技巧

    多列展示 查看DataFrame时,列数较多会省略中间列的信息,可以设置最大展示列数,代码如下: 1 import pandas as pd 2 pd.set_option('display.max_ ...

  7. mysql 空值(null)和空字符('')的区别

    日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到Mysql中的NULL和空字符. 空字符(")和空值(null)表面上看都是空,其实存在一些差异: 定义: 空值(NULL)的长度 ...

  8. nginx 1.12 负载均衡配置

    负载均衡策略有以下几种: 请求轮询:round-robin,是默认策略,应用服务器的请求以循环方式分发,可以设置权重weight,默认权重均为1,因此每台后端服务器接受的请求数相同. 最少连接:lea ...

  9. Sequence(Poj2442)

    Sequence(Poj2442) 题意: 有m个数列,每个数列n个值,每个序列中选取一个值可以组成n^m种不同的序列,求前n小的序列和. Input 12 31 2 32 2 3 Output 3 ...

  10. Python 为什么不支持 switch 语句?

    本文出自"Python为什么"系列,请查看全部文章 在这篇文章里,我们会聊一聊为什么 Python 决定不支持 switch 语句. 为什么想要聊这个话题呢? 主要是因为 swit ...