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中time()方法的使用的教程
May 22 Python
Python创建xml文件示例
Mar 22 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
解决python爬虫中有中文的url问题
May 11 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
django框架自定义用户表操作示例
Aug 07 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
python实现加密的方式总结
Jan 19 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 Python
python抢购软件/插件/脚本附完整源码
Mar 04 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
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
PHP插入排序实现代码
2013/04/04 PHP
php数据访问之增删改查操作
2016/05/09 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
jQuery实现图片切换效果
2020/10/19 jQuery
vue实现简单的登录弹出框
2020/10/26 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python工厂函数用法实例分析
2018/05/14 Python
pandas通过索引进行排序的示例
2018/11/16 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
工作的心得体会
2013/12/31 职场文书
会议主持词
2014/03/17 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
关于爱国的标语
2014/06/24 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫