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中设置变量访问权限的方法
Apr 27 Python
基于进程内通讯的python聊天室实现方法
Jun 28 Python
利用python获取Ping结果示例代码
Jul 06 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
Python深度优先算法生成迷宫
Jan 22 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
Python3.5实现的罗马数字转换成整数功能示例
Feb 25 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
Sep 18 Python
pycharm 复制代码出现空格的解决方式
Jan 15 Python
python自动化之如何利用allure生成测试报告
May 02 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
极典R601SW收音机
2021/03/02 无线电
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
PHP 表单提交给自己
2008/07/24 PHP
中英文字符串翻转函数
2008/12/09 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
小程序实现按下录音松开识别语音
2019/11/22 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
python 控制语句
2011/11/03 Python
python中from module import * 的一个坑
2014/07/20 Python
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
光声世纪笔试题目
2012/08/25 面试题
历史学专业推荐信
2013/11/06 职场文书
数控机械专业个人的自我评价
2014/01/02 职场文书
工作自我评价范文
2015/03/05 职场文书
医院保洁员管理制度
2015/08/05 职场文书
宝宝满月祝酒词
2015/08/10 职场文书
初中班主任教育随笔
2015/08/15 职场文书