第四节 Python基础之数据类型(集合)
- 在学习本节之前,我们先对数据类型做一个补充,也就是数据类型的分类:
- 按照可变和不可变来分:
- 可变:列表,字典
- 不可变:数字,字符串,元组
- 按照访问顺序来分:
- 顺序访问:字符串,列表,元组
- 映射的方式访问:字典
- 直接访问:数字
- 按照存放元素的个数来分:
- 容器类型:列表,元组,字典
- 原子类型:数字,字符串
集合,又不同的元素组成,目的是将不同的值放到一起,不同的集合间用作关系运算,无需纠结集合中的单个值。无序,元素必须是不可变类型。创建集合的方法有两种,一种是set(),另一种是frozenset()。通过set()创建的集合是可变集合,不存在hash值,无序且不重复;通过frozenset()创建的集合是不可变的,我们也可以叫做冻结集合,存在hash值,可以作为字典的key值。在通过这两种方法进行创建的时候,如果不传入参数的话,就会创建空的集合,如果传入参数,那就必须是可迭代的,比如一个序列,一个列表等。
集合的创建
- set()来创建
name = "jasonhy"- s = set(name)
- print(s)
输出结果是:
{'s', 'a', 'h', 'n', 'j', 'y', 'o'}
- names = ["jasonhy","Jasonhy"]
- s = set(names)
- print(s)
输出结果是:
{'Jasonhy', 'jasonhy'}
功能一:添加元素
- def add(self, *args, **kwargs):
- """
- Add an element to a set. #添加一个元素到集合中
- This has no effect if the element is already present.
- """
- pass
- def update(self, *args, **kwargs):
- """ Update a set with the union of itself and others. """ #可添加多个值,只要是可迭代的都可以添加进去
- pass
- 案例:
- name = "jasonhy"
- s = set(name)
- s.add("")
- print(s)
输出结果是:
{'y', 'j', 'a', 'h', '18', 's', 'n', 'o'}
- #添加多个值
name = "jasonhy"- s = set(name)
- s.update("JASONHY")
- print(s)
输出结果是:
{'n', 'N', 'O', 'Y', 'o', 'j', 'J', 'S', 'A', 's', 'h', 'H', 'a', 'y'}
- 功能二:删除元素
- def clear(self, *args, **kwargs):
- """ Remove all elements from this set. """ #删除所有的元素
- pass
- def pop(self, *args, **kwargs):
- """
- Remove and return an arbitrary set element. #随机删除一个元素,并将这个元素返回
- Raises KeyError if the set is empty.
- """
- pass
- def remove(self, *args, **kwargs):
- """
- Remove an element from a set; it must be a member. #删除一个指定的元素,如果该元素不存在就会报错
- If the element is not a member, raise a KeyError.
- """
- pass
- def discard(self, *args, **kwargs):
- """
- Remove an element from a set if it is a member. #删除指定的元素,如果该元素不存在,不会报错
- If the element is not a member, do nothing.
- """
- pass
案例:
- #全部删除
name = "jasonhy"- s = set(name)
- s.clear()
- print(s)
输出结果是:
set()
- #随机删除,并将删除的值返回
name = "jasonhy"- s = set(name)
- vstr = s.pop()
- print(vstr,s)
输出结果是:
y {'n', 's', 'h', 'j', 'a', 'o'}
- #如果元素存在就会报错,元素存在的情况
name = "jasonhy"- s = set(name)
- s.remove("j")
- print(s)
输出结果是:
{'s', 'h', 'o', 'n', 'y', 'a'}
- #元素不存在的情况
name = "jasonhy"- s = set(name)
- s.remove("J")
- print(s)
输出结果是:
KeyError: 'J'
- #元素存不存在都不会报错
name = "jasonhy"- s = set(name)
- s.discard("j")
- print(s)
输出结果是:
{'s', 'n', 'y', 'h', 'a', 'o'}
功能三:运算
- #求两个集合的交集,符号是&
def intersection(self, *args, **kwargs):- """
- Return the intersection of two sets as a new set. #返回两个集合的交集部分
- (i.e. all elements that are in both sets.)
- """
- pass
- #求两个集合的并集,符号|
def union(self, *args, **kwargs):- """
- Return the union of sets as a new set. #返回两个集合的并集
- (i.e. all elements that are in either set.)
- """
- pass
- #求两个集合的差集,符号-
def difference(self, *args, **kwargs):- """
- Return the difference of two or more sets as a new set. #返回集合不同的部分
- (i.e. all elements that are in this set but not the others.) #比如集合:SA - SB那么返回的集合就只能是SA里面的
- """
- pass
- #求交叉补集,符号^
def symmetric_difference(self, *args, **kwargs):- """
- Return the symmetric difference of two sets as a new set. #返回集合不同的部分
- (i.e. all elements that are in exactly one of the sets.) #比如集合SA^SB,返回的集合只能属于这两个集合中的一个,不能同时属于两个
- """
- pass
- #求差集之后更新原来集合
def difference_update(self, *args, **kwargs):- """ Remove all elements of another set from this set. """
- pass
案例:
- #交集
name = "jasonhy"- s = set(name)
- sother = set("jasonhyJASONHY")
- print(s & sother)
输出结果是:
{'s', 'o', 'h', 'a', 'n', 'j', 'y'}
- #并集
name = "jasonhy"- s = set(name)
- sother = set("jasonhyJASONHY")
- print(s | sother)
输出结果是:
{'o', 'Y', 'O', 'A', 'N', 'a', 'J', 'h', 'n', 'H', 'y', 's', 'S', 'j'}
- #差集
name = "jasonhy"- s = set(name)
- sother = set("jasonhyJASONHY")
- print(sother - s)
输出结果是:
{'S', 'Y', 'O', 'A', 'J', 'H', 'N'}
- #交叉补集
name = "jasonhy"- s = set(name)
- sother = set("jasonhyJASONHY")
- print(s ^ sother)
输出结果是:
{'H', 'S', 'J', 'O', 'Y', 'A', 'N'}
- #差值之后更新sother
name = "jasonhy"- s = set(name)
- sother = set("jasonhyJASONHY")
- sother.difference_update(s)
- print(sother)
输出结果是:
{'A', 'J', 'S', 'N', 'Y', 'O', 'H'}
功能四:判断集合之间的关系
- def issubset(self, *args, **kwargs):
- """ Report whether another set contains this set. """ #另外一个集合是否包含这个集合
- pass
- def issuperset(self, *args, **kwargs):
- """ Report whether this set contains another set. """ #这个集合是否包含另外一个集合
- pass
- def isdisjoint(self, *args, **kwargs):
- """ Return True if two sets have a null intersection. """ #两个集合是否有交集,如果没有交集,返回True
- pass
案例:
- #判断s是否是sother的ziji
name = "jasonhy"- s = set(name)
- sother = set("jasonhyJASONHY")
- print(s.issubset(sother))
输出结果是:
True
- #判断sother是否是s的父集
name = "jasonhy"- s = set(name)
- sother = set("jasonhyJASONHY")
- print(sother.issuperset(s))
输出结果是;
True
- #判断两个集合是否有交集,有的话返回False
name = "jasonhy"- s = set(name)
- sother = set("jasonhyJASONHY")
- print(sother.isdisjoint(s))
输出结果是:
False
frozenset()来创建
- name = "jasonhy"
- sthis = frozenset(name)
- print(sthis)
输出结果是:
frozenset({'a', 'n', 'j', 'y', 'o', 'h', 's'})
和set()创建不同的是,它不具备删除和添加元素的功能,其他功能和set()的功能一样的
第四节 Python基础之数据类型(集合)的更多相关文章
- 第一节 Python基础之数据类型(整型,布尔值,字符串)
数据类型是每一种语言的基础,就比如说一支笔,它的墨有可能是红色,有可能是黑色,也有可能是黄色等等,这不同的颜色就会被人用在不同的场景.Python中的数据类型也是一样,比如说我们要描述一个人的年龄:小 ...
- Python基础之数据类型
Python基础之数据类型 变量赋值 Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值 ...
- Python基础篇(set集合)
Python基础篇(set集合,深浅拷贝) set集合是Python的一个基本类型,一般是不常用.set中的元素是不重复的.无序的里边 的元素必须是可hash的比如int,str,tuple,bool ...
- 第二章:python基础,数据类型
"""第二章:python基础,数据类型2.1 变量及身份运算补充2.2 二进制数2.3 字符编码每8位所占的空间位一个比特,这是计算机中最小的表示单位.每8个比特组成一 ...
- python基础一数据类型之字典
摘要: python基础一数据类型之一字典,这篇主要讲字典. 1,定义字典 2,字典的基础知识 3,字典的方法 1,定义字典 1,定义1个空字典 dict1 = {} 2,定义字典 dict1 = d ...
- 『Python基础-11』集合 (set)
# 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...
- python学习第四讲,python基础语法之判断语句,循环语句
目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
- python 基础操作--数据类型
一.变量 1.定义:将运算的中间结果暂存到内存,以便后续程序调用. 2.命名规则 1.变量由字母.数字.下划线搭配组合而成: 2.不可以用数字开头,也不能全都是数字: 3.不能是python 关键字, ...
随机推荐
- C#中异步使用及回调
1. 一句话理解异步 我叫你去吃饭,叫完你不去,那我就会一直等你,直到你和我一起去吃饭.这叫同步! 我叫你去吃饭,叫完不管你去不去,我都不会等你,我自己去吃饭.这叫异步! 2. 异步使用 static ...
- vue created中初始化属性
created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图. mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作
- 马凯军201771010116《面向对象与程序设计Java》第十二周学习总结
一.理论与知识学习部分 Java的抽象窗口工具箱(Abstract Window Toolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类. 大部分AWT组件都 ...
- php优秀框架codeigniter学习系列——CI_Loader类分析
这是一个加载视图和文件的类. __construct() 设置视图文件的路径,和获取输出缓冲级别. initialize() 该方法只会被CI_Controller调用一次,会调用 $this-> ...
- winform devexpress 用法汇总
废话不多说先上图 1.封装分页控件 qrcodeOnPage1.SearchData(gridControl2, IDataPage, sWhere, "", "tb_o ...
- 2017年5月11日17:43:06 rabbitmq 消费者队列
从昨天开始发现个问题,一个接口在本地调用时大部分正常,一旦在生成者打一个断点调试,并且在promotion也打断点的时候会出现没有返回channel的异常,然后消费者就再也消费不了了 16:57:45 ...
- php 调用接口
1.一般常用方法 file_get_contents(): 今天调用了一个反人类的接口,接口是get方式传输,里面有一个参数是当前时间,没错,不是时间戳,是当前格式化的时间:2017-8-9 11:1 ...
- js实现软键盘
<p><img id="img" onclick="javascript:var s=document.createElement('script'); ...
- 20个可用于商业用途的免费 CC0 授权的高分辨率图库
如今国人已经越来越重视版权了. 而用CC0 授权的图片不用担心版权的问题,那么什么是CC0授权呢?简单来说就是「公共领域贡献宣告」授权,当创作者在自身作品使用 CC0 授权时,代表于符合法律规定的最大 ...
- USB接口禁用与启用
前几天闺蜜淘了一台小本,但是发现计算机USB接口是禁用的,有点头疼,所以问了万能的度娘,找到了n种办法.不过这一种是适用于我的情况,简单记录一下. 解决方法:(主要就是修改注册表) 1.打开注册表编辑 ...