Python中的集合类型知识讲解


Posted in Python onAugust 19, 2015

集合类型
        数学上,,把set称做由不同的元素组成的集合,集合(set)的成员通常被称做集合元素(set elements)。Python把这个概念引入到它的集合类型对象里。集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。数学集合转为Python的集合对象很有效,集合关系测试和union、intersection等操作符在Python里也同样如我们所预想地那样工作。
        和其他容器类型一样,集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。
        集合(sets)有两种不同的类型:可变集合(set)和不可变集合(frozenset)。对可变集合(set),可以添加和删除元素,对不可变集合(frozenset)则不允许这样做。注意:可变集合(set)不是可哈希的,因此既不能用做字典的键也不能做其他集合中的元素。不可变集合
(frozenset)则正好相反,即它们有哈希值,能被用做字典的键或是作为集合中的一个成员。
         集合操作符和关系符号: 

Python中的集合类型知识讲解

  集合类型的实际操作:

(1)如何创建集合类型和给集合赋值
        集合与列表( [ ] )和字典( { } ) 不同,没有特别的语法格式。列表和字典可以分别用他们自己的工厂方法 list() 和 dict() 创建,这也是集合被创建的唯一方法:用集合的工厂方法set()和frozenset()。

>>> s = set('cheeseshop') 
  >>> s 
  set(['c', 'e', 'h', 'o', 'p', 's']) 
  >>> t = frozenset('bookshop') 
  >>> t 
  frozenset(['b', 'h', 'k', 'o', 'p', 's']) 
  >>> len(s), len(t) 
  (6, 6) 
  >>> s == t 
  False

(2)如何访问集合中的值
       可以遍历查看集合成员或检查某项元素是否是一个集合中的成员。

>>> 'k' in t 
  True 
  >>> for i in s: 
  ...   print i 
  ...  
  c 
  e 
  h 
  o 
  p 
  s

(3)如何更新集合
         用各种集合内建的方法和操作符添加和删除集合的成员。只有可变集合能被修改,试图修改不可变集合会引发异常。
[html] view plaincopy在CODE上查看代码片派生到我的代码片

>>> s.add('z') 
  >>> s 
  set(['c', 'e', 'h', 'o', 'p', 's', 'z']) 
  >>> s.update('pypi') 
  >>> s 
  set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y', 'z']) 
  >>> s.remove('z') 
  >>> s -= set('pypi') 
  >>> s 
  set(['c', 'e', 'h', 'o', 's'])

(4)如何删除集合中的成员和集合
        删除集合成员remove()内建方法。删除集合本身,可以像删除任何Python对象一样,令集合超出它的作用范围或调用del将它们直接清除出当前的名字空间。如果它的引用计数为零,也会被标记以便被垃圾回收。如del s。

实例:
用集合的工厂方法 set()和 frozenset():

>>> s = set('cheeseshop') 
  >>> s 
  set(['c', 'e', 'h', 'o', 'p', 's']) 
  >>> t = frozenset('bookshop') 
  >>> t 
  frozenset(['b', 'h', 'k', 'o', 'p', 's']) 
  >>> type(s) 
  <type 'set'> 
  >>> type(t) 
  <type 'frozenset'>

如何更新集合用各种集合内建的方法和操作符添加和删除集合的成员:

>>> s.add('z') 
  >>> s 
  set(['c', 'e', 'h', 'o', 'p', 's', 'z']) 
  >>> s.update('pypi') 
  >>> s 
  set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y', 'z']) 
  >>> s.remove('z') 
  >>> s 
  set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y']) 
  >>> s -= set('pypi') 
  >>> s 
  set(['c', 'e', 'h', 'o', 's'])

 

删除集合

del s

成员关系 (in, not in)

>>> s = set('cheeseshop') 
  >>> t = frozenset('bookshop') 
  >>> 'k' in s 
  False 
  >>> 'k' in t 
  True 
  >>> 'c' not in t 
  True

集合等价/不等价

>>> s == t 
  False 
  >>> s != t 
  True 
  >>> u = frozenset(s) 
  >>> s == u 
  True 
  >>> set('posh') == set('shop') 
  True

差补/相对补集( ? )两个集合(s 和t)的差补或相对补集是指一个集合C,该集合中的元素,只属于集合s,而不属
于集合t。差符号有一个等价的方法,

difference(). 
  >>> s - t 
  set(['c', 'e'])

对称差分( ^ ):对称差分是集合的XOR以上文章就是Python字典对集合类型的实际应用步骤。

Python 相关文章推荐
Python 用户登录验证的小例子
Mar 06 Python
Python深入学习之对象的属性
Aug 31 Python
《Python之禅》中对于Python编程过程中的一些建议
Apr 03 Python
简介Django框架中可使用的各类缓存
Jul 23 Python
Python实现简单多线程任务队列
Feb 27 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
python 实现矩阵按对角线打印
Nov 29 Python
Python decorator拦截器代码实例解析
Apr 04 Python
详解python如何引用包package
Jun 07 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
python创建文本文件的简单方法
Aug 30 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 Python
深入理解Python中字典的键的使用
Aug 19 #Python
详解Python中映射类型的内建函数和工厂函数
Aug 19 #Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 #Python
Python中字典的基础知识归纳小结
Aug 19 #Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 #Python
Python中map,reduce,filter和sorted函数的使用方法
Aug 17 #Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 #Python
You might like
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
vue axios 二次封装的示例代码
2017/12/08 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
Python中交换两个元素的实现方法
2018/06/29 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
python调用支付宝支付接口流程
2019/08/15 Python
Python实现直播推流效果
2019/11/26 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
pandas apply多线程实现代码
2020/08/17 Python
Python字典dict常用方法函数实例
2020/11/09 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
美国时尚在线:Showpo
2017/09/08 全球购物
标准自荐信范文
2014/01/29 职场文书
监考失职检讨书
2015/01/26 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js