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使用自定义user-agent抓取网页的方法
Apr 15 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
Python中常用信号signal类型实例
Jan 25 Python
使用memory_profiler监测python代码运行时内存消耗方法
Dec 03 Python
pandas ix &amp;iloc &amp;loc的区别
Jan 10 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
wxPython电子表格功能wx.grid实例教程
Nov 19 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 Python
总结python多进程multiprocessing的相关知识
Jun 29 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
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
python 编码规范整理
2018/05/05 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
Python如何实现机器人聊天
2020/09/10 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
python归并排序算法过程实例讲解
2020/11/04 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
教师实习自我鉴定
2013/12/11 职场文书
三万活动总结
2014/04/28 职场文书
庆元旦演讲稿
2014/09/15 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
nginx静态资源的服务器配置方法
2022/07/07 Servers
python+pyhyper实现识别图片中的车牌号思路详解
2022/12/24 Python