零基础入门学习Python(27)--集合:在我的世界里,你就是唯一
知识点
集合:set
set
和dict
类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
集合中的元素的三个特征:
1)确定性(元素必须可hash)
2)互异性(去重)
3)无序性(集合中的元素没有先后之分),如集合{3,4,5}
和{3,5,4}
算作同一个集合
【注意】:集合存在的意义就在于去重和关系运算。
创建集合
创建一个空集合需使用set() 工厂函数:
语法:
class set([iterable])
参数说明:
iterable -- 可迭代对象对象;
示例:
>>> set1 = set()
>>> type(set1)
<class 'set'>
>>> set2 = {11,22,33,12,11}
>>> type(set2)
<class 'set'>
>>> set2
{33, 11, 12, 22}
【注意】:注意在创建空集合的时候只能使用s=set()
,因为s={}
创建的是空字典
>>> a = set('boy') #set一个字符串
>>> a
{'b', 'y', 'o'}
>>> b = set(['y','b','o','o']) #set一个列表
>>> b
{'b', 'y', 'o'}
>>> f = set(('k1','k1','k2','k3',1,2)) #set一个元祖
>>> f
{1, 2, 'k2', 'k3', 'k1'}
>>> c = set({'k1':1,'k2':2,'k3':2}) #set一个字典
>>> c
{'k2', 'k1', 'k3'}
>>> type(c)
<class 'set'>
>>> d = {1,2,3,4}
>>> type(d)
<class 'set'>
>>> d
{1, 2, 3, 4}
>>> e = {(1,2,1,1)}
>>> e
{(1, 2, 1, 1)}
创建不可变集合
frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
语法:
class frozenset([iterable])
参数
iterable -- 可迭代的对象,比如列表、字典、元组等等。
示例:
>>>a = frozenset(range(10)) # 生成一个新的不可变集合
>>> a
frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = frozenset('runoob')
>>> b
frozenset(['b', 'r', 'u', 'o', 'n']) # 创建不可变集合
>>> num3 = frozenset([1,2,3,4,5])
>>> num3
frozenset({1, 2, 3, 4, 5})
>>> num3.add(0)
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
num3.add(0)
AttributeError: 'frozenset' object has no attribute 'add'
集合的关系运算
in
,not in
:判断某元素是否在集合内
>>> a
{'b', 'y', 'o'}
>>> b in a
False
>>> 'b' in a
==
,!=
:判断两个集合是否相等
>>> a = {3,4,5}
>>> b = {4,3,5}
>>> a == b
True
集合的内建方法
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
s.issubset(t) | s <= t | 子集测试(允许不严格意义上的子集):s中所有的元素都是t的成员 |
s < t | 子集测试(严格意义上):s中所有的元素都是t的成员 |
示例:
>>> s = {1,2,3,4}
>>> t = {1,2,3,4,5}
>>> s.issubset(t)
True
>>> s <= t
True
>>> s < t
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
s.issuperset(t) | s >= t | 超集测试(允许不严格意义上的超集):t中所有的元素都是s的成员 |
s > t | 超集测试(严格意义上):t中所有的元素都是s的成员 |
示例:
>>> s = {1,2,3,4,5}
>>> t = {1,2,3}
>>> s.issuperset(t)
True
>>> s >= t
True
>>> s > t
True
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
s.union(t) | s | t | 合并操作:s “或” t 中的元素 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.union(t)
{1, 2, 3, 4, 5}
>>> s|t
{1, 2, 3, 4, 5}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
s.intersection(t) | s & t | 交集操作:s “与” t 中的元素 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s & t
{2, 3, 4}
>>> s.intersection(t)
{2, 3, 4}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
s.difference(t) | s - t | 差分操作:在s中存在,在t中不存在的元素 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s - t
{1}
>>> s.difference(t)
{1}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
s.symmetric_difference(t) | s ^ t | 对称差分操作:s “或” t 中的元素,但不是s和t的共有元素 |
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.symmetric_difference(t)
{1, 5}
>>> s ^ t
{1, 5}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
s.copy() | 返回s的浅拷贝 |
示例:
>>> a = {1,2,3}
>>> b = a.copy()
>>> b
{1, 2, 3}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
以下方法不适用于不可变集合frozenset() | ||
s.update(t) | s |= t | 将t中的元素添加到s中 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s |= t
>>> s
{1, 2, 3, 4, 5}
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.update(t)
>>> s
{1, 2, 3, 4, 5}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
以下方法不适用于不可变集合frozenset() | ||
s.intersection_update(t) | s &= t | 交集修改操作:s中仅包括s和t中共有的成员 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s.intersection_update(t)
>>> s
{2, 3, 4}
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s &= t
>>> s
{2, 3, 4}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
以下方法不适用于不可变集合frozenset() | ||
s.difference_update(t) | s -= t | 差修改操作:s中包括仅属于s但不属于t的成员 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s -= t
>>> s
{1}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
以下方法不适用于不可变集合frozenset() | ||
s.symmetric_difference_update(t) | s ^= t | 对称差分修改操作:s中包括仅属于s或仅属于t的成员 |
示例:
>>> s = {1,2,3,4}
>>> t = {2,3,4,5}
>>> s ^= t
>>> s
{1, 5}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
以下方法不适用于不可变集合frozenset() | ||
s.add(obj) | 加操作:将obj元素添加到s中 |
示例:
>>> s = {1,2,3,4}
>>> s.add('fs')
>>> s
{1, 2, 3, 4, 'fs'}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
以下方法不适用于不可变集合frozenset() | ||
s.remove(obj) | 删除操作:将obj元素从s中删除,如果s中不存在obj,将引发异常 |
示例:
>>> s = {1, 2, 3, 4, 'fs'}
>>> s.remove('fs')
>>> s
{1, 2, 3, 4}
>>> s.remove('a')
Traceback (most recent call last):
File "<pyshell#182>", line 1, in <module>
s.remove('a')
KeyError: 'a'
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
以下方法不适用于不可变集合frozenset() | ||
s.discard(obj) | 丢弃操作:将obj元素从s中删除,如果s中不存在obj,也没事 |
示例:
>>> s = {1, 2, 3, 4, 'fs'}
>>> s.discard('fs')
>>> s
{1, 2, 3, 4}
>>> s.discard('a')
>>> s
{1, 2, 3, 4}
集合(s).方法名 | 等价符号 | 方法说明 |
---|---|---|
以下方法不适用于不可变集合frozenset() | ||
s.pop() | 弹出操作:移除并返回s中任意一个元素 | |
s.clear() | 清除操作:请出s中所有的元素 |
>>> s = {1, 2, 3, 4}
>>> s.pop()
1
>>> s
{2, 3, 4}
>>> s.pop()
2
>>> s
{3, 4}
>>> s.clear()
>>> s
set()
课后习题
零基础入门学习Python(27)--集合:在我的世界里,你就是唯一的更多相关文章
- 【Python教程】《零基础入门学习Python》(小甲鱼)
[Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609
- 《零基础入门学习Python》【第一版】视频课后答案第001讲
测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...
- 零基础入门学习Python(1)--我和Python的第一次亲密接触
前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...
- 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案
国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- 零基础入门学习Python(36)--类和对象:给大家介绍对象
知识点 Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前 ...
- 零基础入门学习Python(17)--函数:Python的乐高积木
前言 相信大家小时候都玩过神奇的乐高积木, 只要通过想象力和创造力我们可以拼凑很多神奇的东西,那么随着我们学习的深入,我们编写的Python代码也将日益增加,并且也越来越复杂, 所以呢,我们需要找寻一 ...
- 零基础入门学习Python(35)--图形用户界面入门:EasyGui
知识点 EasyGui学习文档[超详细中文版] 1. 建议不要在IDLE上运行EasyGui EasyGui是运行在TKinter上并拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并 ...
- 零基础入门学习Python(13)--元组:戴上了枷锁的列表
前言 这节课我们讨论主题是元祖:我们有个小标题戴上了枷锁的列表 我们都知道早在300多年前,孟德斯鸠在变法的时候说过,一切拥有权力的人都容易被滥用权力,这是万古不变的一条经验.但是呢,凡是拥有大权利的 ...
随机推荐
- HDU1429:胜利大逃亡(续)
传送门 题意 给出一个迷宫,门需要钥匙来打开,t秒内能否从起点到达终点 分析 这题我用以前一道题的代码改了改就过了,具体思想:设置vis[status][x][y],status记录到达该点拥有的钥匙 ...
- bzoj 4822: [Cqoi2017]老C的任务【扫描线+树状数组+二维差分】
一个树状数组能解决的问题分要用树套树--还写错了我别是个傻子吧? 这种题还是挺多的,大概就是把每个矩形询问差分拆成四个点前缀和相加的形式(x1-1,y1-1,1)(x2.y2,1)(x1-1,y2,- ...
- 51nod 1220 约数之和【莫比乌斯反演+杜教筛】
首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...
- 【练习】Java实现的杨辉三角形控制台输出
import java.util.Scanner; /** * YangHui_tst01 * @author HmLy * @version 000 * - - - - - - - * 练习代码.( ...
- QT5每日一学(二)编写QT多窗口程序
一.添加主窗口 1.首先打开Qt Creator,新建Qt Widgets Application,项目名称设置为windows,在类信息界面保持基类为QMainWindow.类名为MainWindo ...
- C#扩展方法学习
扩展方法的本质是什么,详细见此文 C#扩展方法,爱你在心口难开 重点如下:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法 ...
- JavaScript的执行
下面内容参考:http://blog.csdn.net/cxiaokai/article/details/7552653 http://www.jb51.net/article/36755.htm 首 ...
- ambari-server启动WARN qtp-ambari-client-87] ServletHandler: 563 /api/v1/stacks/HDP/versions/2.4/recommendations java.lang.NullPointerException报错解决办法(图文详解)
问题详情 来源是,我在Ambari集群里,安装Hue. 给Ambari集群里安装可视化分析利器工具Hue步骤(图文详解 所遇到的这个问题. 然后,去ambari-server的log日志,查看,如 ...
- scala学习笔记4:函数和闭包
以下主要记录的是看完scala in programming这本书functions and closures(第八章)后的要点总结. 1,函数可以存在的地方:函数方法,嵌套函数. 2,关于funct ...
- [转]Azure 表存储和 Windows Azure SQL Database - 比较与对照
本文转自:https://msdn.microsoft.com/library/azure/jj553018 更新时间: 2014年10月 作者:Valery Mizonov 和 Seth Manhe ...