知识点

集合:set

setdict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

集合中的元素的三个特征

1)确定性(元素必须可hash)

2)互异性(去重)

3)无序性(集合中的元素没有先后之分),如集合{3,4,5}{3,5,4}算作同一个集合

【注意】:集合存在的意义就在于去重和关系运算。

创建集合

创建一个空集合需使用set() 工厂函数:

语法:

  1. class set([iterable])
  2. 参数说明:
  3. iterable -- 可迭代对象对象;

示例:

  1. >>> set1 = set()
  2. >>> type(set1)
  3. <class 'set'>
  4. >>> set2 = {11,22,33,12,11}
  5. >>> type(set2)
  6. <class 'set'>
  7. >>> set2
  8. {33, 11, 12, 22}

【注意】:注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典

  1. >>> a = set('boy') #set一个字符串
  2. >>> a
  3. {'b', 'y', 'o'}
  4. >>> b = set(['y','b','o','o']) #set一个列表
  5. >>> b
  6. {'b', 'y', 'o'}
  7. >>> f = set(('k1','k1','k2','k3',1,2)) #set一个元祖
  8. >>> f
  9. {1, 2, 'k2', 'k3', 'k1'}
  10. >>> c = set({'k1':1,'k2':2,'k3':2}) #set一个字典
  11. >>> c
  12. {'k2', 'k1', 'k3'}
  13. >>> type(c)
  14. <class 'set'>
  15. >>> d = {1,2,3,4}
  16. >>> type(d)
  17. <class 'set'>
  18. >>> d
  19. {1, 2, 3, 4}
  20. >>> e = {(1,2,1,1)}
  21. >>> e
  22. {(1, 2, 1, 1)}

创建不可变集合

frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

语法:

  1. class frozenset([iterable])
  2. 参数
  3. iterable -- 可迭代的对象,比如列表、字典、元组等等。

示例:

  1. >>>a = frozenset(range(10)) # 生成一个新的不可变集合
  2. >>> a
  3. frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  4. >>> b = frozenset('runoob')
  5. >>> b
  6. frozenset(['b', 'r', 'u', 'o', 'n']) # 创建不可变集合
  7. >>> num3 = frozenset([1,2,3,4,5])
  8. >>> num3
  9. frozenset({1, 2, 3, 4, 5})
  10. >>> num3.add(0)
  11. Traceback (most recent call last):
  12. File "<pyshell#42>", line 1, in <module>
  13. num3.add(0)
  14. AttributeError: 'frozenset' object has no attribute 'add'

集合的关系运算

in,not in:判断某元素是否在集合内

  1. >>> a
  2. {'b', 'y', 'o'}
  3. >>> b in a
  4. False
  5. >>> 'b' in a

==,!=:判断两个集合是否相等

  1. >>> a = {3,4,5}
  2. >>> b = {4,3,5}
  3. >>> a == b
  4. True

集合的内建方法

集合(s).方法名 等价符号 方法说明
s.issubset(t) s <= t 子集测试(允许不严格意义上的子集):s中所有的元素都是t的成员
s < t 子集测试(严格意义上):s中所有的元素都是t的成员
  1. 示例:
  2. >>> s = {1,2,3,4}
  3. >>> t = {1,2,3,4,5}
  4. >>> s.issubset(t)
  5. True
  6. >>> s <= t
  7. True
  8. >>> s < t
集合(s).方法名 等价符号 方法说明
s.issuperset(t) s >= t 超集测试(允许不严格意义上的超集):t中所有的元素都是s的成员
s > t 超集测试(严格意义上):t中所有的元素都是s的成员
  1. 示例:
  2. >>> s = {1,2,3,4,5}
  3. >>> t = {1,2,3}
  4. >>> s.issuperset(t)
  5. True
  6. >>> s >= t
  7. True
  8. >>> s > t
  9. True
集合(s).方法名 等价符号 方法说明
s.union(t) s | t 合并操作:s “或” t 中的元素
  1. 示例:
  2. >>> s = {1,2,3,4}
  3. >>> t = {2,3,4,5}
  4. >>> s.union(t)
  5. {1, 2, 3, 4, 5}
  6. >>> s|t
  7. {1, 2, 3, 4, 5}
集合(s).方法名 等价符号 方法说明
s.intersection(t) s & t 交集操作:s “与” t 中的元素
  1. 示例:
  2. >>> s = {1,2,3,4}
  3. >>> t = {2,3,4,5}
  4. >>> s & t
  5. {2, 3, 4}
  6. >>> s.intersection(t)
  7. {2, 3, 4}
集合(s).方法名 等价符号 方法说明
s.difference(t) s - t 差分操作:在s中存在,在t中不存在的元素
  1. 示例:
  2. >>> s = {1,2,3,4}
  3. >>> t = {2,3,4,5}
  4. >>> s - t
  5. {1}
  6. >>> s.difference(t)
  7. {1}
集合(s).方法名 等价符号 方法说明
s.symmetric_difference(t) s ^ t 对称差分操作:s “或” t 中的元素,但不是s和t的共有元素
  1. >>> s = {1,2,3,4}
  2. >>> t = {2,3,4,5}
  3. >>> s.symmetric_difference(t)
  4. {1, 5}
  5. >>> s ^ t
  6. {1, 5}
集合(s).方法名 等价符号 方法说明
s.copy() 返回s的浅拷贝
  1. 示例:
  2. >>> a = {1,2,3}
  3. >>> b = a.copy()
  4. >>> b
  5. {1, 2, 3}
集合(s).方法名 等价符号 方法说明
以下方法不适用于不可变集合frozenset()
s.update(t) s |= t 将t中的元素添加到s中
  1. 示例:
  2. >>> s = {1,2,3,4}
  3. >>> t = {2,3,4,5}
  4. >>> s |= t
  5. >>> s
  6. {1, 2, 3, 4, 5}
  7. >>> s = {1,2,3,4}
  8. >>> t = {2,3,4,5}
  9. >>> s.update(t)
  10. >>> s
  11. {1, 2, 3, 4, 5}
集合(s).方法名 等价符号 方法说明
以下方法不适用于不可变集合frozenset()
s.intersection_update(t) s &= t 交集修改操作:s中仅包括s和t中共有的成员
  1. 示例:
  2. >>> s = {1,2,3,4}
  3. >>> t = {2,3,4,5}
  4. >>> s.intersection_update(t)
  5. >>> s
  6. {2, 3, 4}
  7. >>> s = {1,2,3,4}
  8. >>> t = {2,3,4,5}
  9. >>> s &= t
  10. >>> s
  11. {2, 3, 4}
集合(s).方法名 等价符号 方法说明
以下方法不适用于不可变集合frozenset()
s.difference_update(t) s -= t 差修改操作:s中包括仅属于s但不属于t的成员
  1. 示例:
  2. >>> s = {1,2,3,4}
  3. >>> t = {2,3,4,5}
  4. >>> s -= t
  5. >>> s
  6. {1}
集合(s).方法名 等价符号 方法说明
以下方法不适用于不可变集合frozenset()
s.symmetric_difference_update(t) s ^= t 对称差分修改操作:s中包括仅属于s或仅属于t的成员
  1. 示例:
  2. >>> s = {1,2,3,4}
  3. >>> t = {2,3,4,5}
  4. >>> s ^= t
  5. >>> s
  6. {1, 5}
集合(s).方法名 等价符号 方法说明
以下方法不适用于不可变集合frozenset()
s.add(obj) 加操作:将obj元素添加到s中
  1. 示例:
  2. >>> s = {1,2,3,4}
  3. >>> s.add('fs')
  4. >>> s
  5. {1, 2, 3, 4, 'fs'}
集合(s).方法名 等价符号 方法说明
以下方法不适用于不可变集合frozenset()
s.remove(obj) 删除操作:将obj元素从s中删除,如果s中不存在obj,将引发异常
  1. 示例:
  2. >>> s = {1, 2, 3, 4, 'fs'}
  3. >>> s.remove('fs')
  4. >>> s
  5. {1, 2, 3, 4}
  6. >>> s.remove('a')
  7. Traceback (most recent call last):
  8. File "<pyshell#182>", line 1, in <module>
  9. s.remove('a')
  10. KeyError: 'a'
集合(s).方法名 等价符号 方法说明
以下方法不适用于不可变集合frozenset()
s.discard(obj) 丢弃操作:将obj元素从s中删除,如果s中不存在obj,也没事
  1. 示例:
  2. >>> s = {1, 2, 3, 4, 'fs'}
  3. >>> s.discard('fs')
  4. >>> s
  5. {1, 2, 3, 4}
  6. >>> s.discard('a')
  7. >>> s
  8. {1, 2, 3, 4}
集合(s).方法名 等价符号 方法说明
以下方法不适用于不可变集合frozenset()
s.pop() 弹出操作:移除并返回s中任意一个元素
s.clear() 清除操作:请出s中所有的元素
  1. >>> s = {1, 2, 3, 4}
  2. >>> s.pop()
  3. 1
  4. >>> s
  5. {2, 3, 4}
  6. >>> s.pop()
  7. 2
  8. >>> s
  9. {3, 4}
  10. >>> s.clear()
  11. >>> s
  12. set()

课后习题



零基础入门学习Python(27)--集合:在我的世界里,你就是唯一的更多相关文章

  1. 【Python教程】《零基础入门学习Python》(小甲鱼)

    [Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609

  2. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  3. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

  4. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  5. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  6. 零基础入门学习Python(36)--类和对象:给大家介绍对象

    知识点 Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前 ...

  7. 零基础入门学习Python(17)--函数:Python的乐高积木

    前言 相信大家小时候都玩过神奇的乐高积木, 只要通过想象力和创造力我们可以拼凑很多神奇的东西,那么随着我们学习的深入,我们编写的Python代码也将日益增加,并且也越来越复杂, 所以呢,我们需要找寻一 ...

  8. 零基础入门学习Python(35)--图形用户界面入门:EasyGui

    知识点 EasyGui学习文档[超详细中文版] 1. 建议不要在IDLE上运行EasyGui EasyGui是运行在TKinter上并拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并 ...

  9. 零基础入门学习Python(13)--元组:戴上了枷锁的列表

    前言 这节课我们讨论主题是元祖:我们有个小标题戴上了枷锁的列表 我们都知道早在300多年前,孟德斯鸠在变法的时候说过,一切拥有权力的人都容易被滥用权力,这是万古不变的一条经验.但是呢,凡是拥有大权利的 ...

随机推荐

  1. 线程Coroutines 和 Yield(转)

    之前一直很纠结这个问题,在网上找到了这篇文章,给大家分享下: 第一种方法:    void Start()     {         print("Starting " + Ti ...

  2. bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式【后缀自动机】

    就是后缀自动机的板子嘛..构造完自动机之后拓扑一下,记录size,对于size大于k的点和ans取max #include<iostream> #include<cstdio> ...

  3. [App Store Connect帮助]九、衡量 App 表现(1)分析和报告概述

    App Store Connect 提供如下分析和报告,以衡量您 App 的表现并查看向您支付的最终付款. App 分析 通过 App Store 展示次数.产品页面查看次数.销售额.App 使用次数 ...

  4. 【爬坑系列】之vxlan网络实现

    linux 内核从3.7之后就内部集成了vxlan功能,所以可以使用linux内核提供的vxlan功能,经过配置创建vxlan网络. 而从Docker自Docker Engine 1.9之后,就自带o ...

  5. oracle数据库当前用户下所有表名和表名的注释

    select a.TABLE_NAME,b.COMMENTSfrom user_tables a,user_tab_comments bWHERE a.TABLE_NAME=b.TABLE_NAMEo ...

  6. SQL 初级教程学习(六)

    1.创建视图 CREATE VIEW [Current Product List] ASSELECT ProductID,ProductNameFROM ProductsWHERE Discontin ...

  7. 暑期训练狂刷系列——poj 3264 Balanced Lineup(线段树)

    题目连接: http://poj.org/problem?id=3264 题目大意: 有n个数从1开始编号,问在指定区间内,最大数与最小数的差值是多少? 解题思路: 在节点中存储max,min,然后查 ...

  8. 条件DP UVA 672 Gangsters

    题目传送门 题意:n个歹徒进饭店,可变化宽度的门,范围[0, k],每个歹徒进门在ti时间进门,身材si,进去后有pi的成功值,问最大的成功值 分析:首先按照进门时间排序,dp[i][j] 表示第i个 ...

  9. Latex排版工具的使用(二) 分类: Latex 2014-06-14 23:01 389人阅读 评论(0) 收藏

    Latex可以支持中文排版,如何实现中文支持可以到网上查找教程. 下面编写一段对中文排版的Latex源文档: 新建文件second.tex: \documentclass{article} \usep ...

  10. java批处理、MySQL批处理

    e: cd MySQL\bin mysql -uroot -proot @pause MySQL批处理.bat e: cd JAVA\jdk1.8.0_77\bin javac Hello.java ...