python--集合概念和实战

集合(set)特点

有的可变,有的不可变;元素无次序,不可重复。

创建集合(set)

说明⚠️:

元组算是列表和字符串的某些特征的杂合,那么集合则可以算是列表和字典的某些特征杂合。

使用set创建集合

>>> s = set("wtf")
>>> s
set(['t', 'w', 'f'])
把字符串中的字符拆解开,形成集合。
>>> s1 = set("zhaodidi")
>>> s1
set(['a', 'd', 'i', 'h', 'o', 'z'])
”haodidi“中有两个“d”和“i”,创建集合时,如发现重复元素,就会过滤掉。

使用 {} 创建集合

>>> s2 = {"python",123}
>>> s2
set(['python', 123])

说明⚠️:

  • 这种方法不提倡,因为 {} 常常被用于字典上,应避免歧义!
  • 特别说明,建立空集合时一定要使用 set() ,不要使用 {} !否则建立的就是字典而非集合。

下面是实例说明为什么创建集合不提倡使用 {}

>>> s3 = {"datagrand",[1,2,'b'],{"name":"python","lang":"chinese"},123}
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'>>> s4 = set("'datagrand',[1,2,'b'],{'name':'python','lang':'chinese'},123")
>>> s4
set(["'", ',', '1', '3', '2', ':', '[', ']', 'a', 'c', 'b', 'e', 'd', 'g', 'i', 'h', 'm', 'l', 'o', 'n', 'p', 's', 'r', 't', 'y', '{', '}'])

说明⚠️:使用 set() 建立起来的集合是可变集合,可变集合都是unhashable type。但是集合中的元素是 hashable type !

什么是 hashable(可哈希)和 unhashable(不可哈希)?

简单理解就是,某数据unhashable(不可哈希)就是其可变,如list或dict。否则,就是hashable(可哈希),如字符串。

集合没有索引(index)

>>> dir(set)
['__and__', '__class__', '__cmp__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
上面列出的并没有“index”
>>> s1
set(['a', 'd', 'i', 'h', 'o', 'z'])
>>> s1[2]
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
报错中明确告知,集合不支持索引!

集合(set)方法

add (增加的是元素)

>>> help(set.add)
Help on method_descriptor:add(...)Add an element to a set.This has no effect if the element is already present.
(END)

实例说明如下:

>>> set1 = set()
>>> set1
set([])
>>> set1.add("zhaodi")   #属于原地修改
>>> set1
set(['zhaodi'])
>>> set2 = set("python")
>>> set2
set(['h', 'o', 'n', 'p', 't', 'y'])
>>> set2.add("learning")
>>> set2
set(['h', 'o', 'n', 'p', 't', 'learning', 'y'])

这里重申下:“集合中的元素应该是 hashable 类型”

set2
set(['h', 'o', 'n', 'p', 't', 'learning', 'y'])
>>> set2.add([1,2,3])
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'如果将列表 [1,2,3] 变成 hashable 类型呢?>>> set2.add('[1,2,3]') # 这里的 '[1,2,3]' 就相当于字符串了
>>> set2
set(['[1,2,3]', 'h', 'o', 'n', 'p', 't', 'learning', 'y']) 

update(合并集合)

>>> help(set.update)
Help on method_descriptor:update(...)Update a set with the union of itself and others. # 这个方法的作用是用原有的集合自身和其他的什么东西构成的新集合更新原来的集合。
(END)

others是指作为参数的不可变对象,将它和原来的集合组成新的集合,用这个新集合替代原来的集合,如下:

>>> set1
set(['zhaodi'])
>>> set1.update("wutf")
>>> set1
set(['f', 'u', 'zhaodi', 'w', 't'])
>>> set1.update((3,4))
>>> set1
set([3, 4, 'f', 'u', 't', 'w', 'zhaodi'])

合并集合,举例如下:

>>> set1
set(['zhaodi'])
>>> set2
set(['[1,2,3]', 'h', 'o', 'n', 'p', 't', 'learning', 'y'])
>>> set2.update(set1) # 把 set1 的元素并入到 set2 中
>>> set2
set(['[1,2,3]', 'h', 'o', 'n', 'p', 't', 'learning', 'y', 'zhaodi'])
>>> set1 # set1 并没有改变
set(['zhaodi'])

pop(删除集合中任意元素)

>>> help(set.pop)
Help on method_descriptor:pop(...)Remove and return an arbitrary(随意) set element.Raises KeyError if the set is empty.
(END)

pop 删除任意一个集合元素

>>> set1
set([3, 4, 'f', 'u', 't', 'w', 'zhaodi'])
>>> set1.pop()
3
>>> set1.pop()
4
>>> set1.pop()
'f'
>>> set1
set(['u', 't', 'w', 'zhaodi'])

pop 删除指定元素 (不能的)

>>> set1
set(['u', 't', 'w', 'zhaodi'])
>>> set1.pop('zhaodi')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given) # pop() 不能有参数的

说明⚠️:

  • set.pop() 是从set中任意选一个元素,删除并将这个值返回
  • pop() 不能有参数,所以 pop 不能指定删除集合中某个元素
  • 如果集合已经为空,再删除,也报错

remove(删除集合中指定元素,有报错信息)

>>> help(set.remove)
Help on method_descriptor:remove(...)Remove an element from a set; it must be a member.If the element is not a member, raise a KeyError.
(END)

说明⚠️:set.remove(obj) 中的 obj 必须是 set 中的元素,否则就报错。实例如下:

>>> set1
set(['u', 't', 'w', 'zhaodi'])
>>> set1.remove("wtf") # 没有 “wtf” 这个元素
Traceback (most recent call last):File "<stdin>", line 1, in <module>
KeyError: 'wtf'
>>> set1.remove("w")
>>> set1
set(['u', 't', 'zhaodi'])

discard(删除集合中指定元素,无报错信息)

>>> help(set.discard)Help on method_descriptor:discard(...)Remove an element from a set if it is a member.If the element is not a member, do nothing.
(END)

说明⚠️:

  • 与 set.remove 功能相似
  • discard(obj) 中的 obj 如果是集合中的元素,就删除;如果不是,就什么都不做(do nothing)
>>> set1
set(['u', 't', 'zhaodi'])
>>> set1.discard("u")
>>> set1.discard("wtf")
>>> set1
set(['t', 'zhaodi'])

clear (删除集合中的所有元素)

>>> help(set.clear)Help on method_descriptor:clear(...)Remove all elements from this set.
(END)

实例如下:

>>> set1
set(['t', 'zhaodi'])
>>> set1.clear()
>>> set1
set([])

写在最后的话

这篇博文是参考老齐老师的大作《跟老齐学python》进行简单总结的,这里没有打广告的意思,只是感觉老齐老师的书很适合python小白学习,内容读起来很轻快,老齐老师的书籍逻辑很清晰,有需要的朋友可以看看~~

gitbook版本:《跟老齐学Python》(入门教程)

我当时买时书籍样纸如下:

转载于:https://blog.51cto.com/wutengfei/2286693

python--集合概念和实战(一)相关推荐

  1. Python数据分析与挖掘实战期末考复习(抱佛脚啦)

    期末三天赛高考我真的会谢,三天学完数据挖掘--真的很极限了的. 课本是那本绿色的Python数据分析与挖掘实战(第2版),作者张良均- 图片来自老师给的ppt,以下内容是我自己总结的,自己复习用,覆盖 ...

  2. python数据分析与挖掘实战 之笔记2

    <python数据分析与挖掘实战>学习笔记2 经过前面章节的分析,即对数据进行探索和预处理,得到了处理后的数据.根据所得到的数据建立分类与预测.聚类分析.关联规则.时序模式.和偏差检测等模 ...

  3. Python 短信通知系统开发实战

    课程介绍 作为学生,你想不想要这样一种服务:教务系统更新成绩后,你的手机上会自动收到成绩通知? 作为白领,你想不想要这样一种服务:公司发布了晋升.放假等新闻时,你的手机上会第一时间收到新闻? 作为-- ...

  4. 树莓派python编程入门先学什么_树莓派Python编程入门与实战

    树莓派Python编程入门与实战 编辑 锁定 讨论 上传视频 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 树莓派是一个只有信用卡大小的裸露电路板,它也是一个运行开源Lin ...

  5. 《Python数据可视化编程实战》——5.5 用OpenGL制作动画

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第5章,第5.5节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  6. python基本概念关系图_Python基本概念

    Python基本概念函数文件的使用def <函数名>(<参数(0个或多个)>):<函数体>return <返回值>数据处理类型文本文件.txt,.py二 ...

  7. python空集_玩转Python集合,这一篇就够了!

    原标题:玩转Python集合,这一篇就够了! 点上方蓝色" 菜鸟学Python",选" 星标"公众号 重磅干货,第一时间送到 选自DataCamp, 作者:Mi ...

  8. 《树莓派Python编程入门与实战(第2版)》——3.4 关于Python解释器

    本节书摘来自异步社区<树莓派Python编程入门与实战(第2版)>一书中的第3章,第3.4节,作者[美] Richard Blum Christine Bresnahan,陈晓明 马立新 ...

  9. python集合类型_Python 的集合(set)类型

    本文简单介绍了Python语言里set类型自带的方法,set类型表示元素和集合的从属关系(membership),和列表等序列相比,最大的特点是无序.可以跟数学里的集合概念完全对应起来. 目录 概念 ...

最新文章

  1. 第一个 Hello Worlds ,打开 opener_server.pl 的大门。OPener_Server 第 3 弹
  2. C/C++变量存储区域
  3. CRMEB 小程序版源码下载
  4. 平衡二叉查找树的构造与遍历(C++)
  5. 谈话《百度搜索引擎的网页质量白皮书》
  6. python识别银行卡数字_Python银行卡数字识别项目 (Opencv)
  7. Mybatis-plus的两种分页插件的配置方式
  8. 谷歌搜索引擎使用语法大全收集
  9. 《编译原理及实践教程》第一章学习笔记
  10. 202101汇率换算
  11. python在股市有什么作用_一颗韭菜的自我修养:用Python分析下股市,练练
  12. 如何1秒内快速判断一个函数的凹凸性?还看不懂我给你赔钱
  13. 卷积神经网络中卷积的作用与原理
  14. 什么是4P-4C--4R营销理论?
  15. php doc转swf,centos安装openoffice将doc、ppt、txt、xls等转换成pdf,再转换成swf用‍FlexPaper显示...
  16. 程序员展望未来八个小小技巧
  17. 人工智能英文原版PDF教材1.03G资源包Artificial Intelligence
  18. 厉害了我们的“中国制造”,新能源“智造”强大到你想象不到
  19. 在hta中使用select下拉框
  20. 如何成为一个有趣的人(专栏总结)

热门文章

  1. 用上Latex实现编辑伪代码
  2. 测试用例-写测试用例时怎么入手
  3. 性能测试之三——资源监控的方法
  4. python输入数据的维度_python – Keras LSTM输入维度设置
  5. 技巧 | 栅格的属性数据和经纬度是分开的两个文件,怎么将它们整合到同一个文件上...
  6. 切换数据库_如何快速切换到其他数据库实例
  7. winfrom 如何让弹窗不影响主界面_「Win」电脑开机后不给我弹几个广告,我还不太习惯...
  8. php xml 实例教程,php解析xml方法实例详解,解析xml实例详解_PHP教程
  9. 什么是交互设计?交互设计是用来干什么的?
  10. 温故而知新,8个有用的JS技巧「小知识点」