博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python--集合概念和实战(一)
阅读量:5890 次
发布时间:2019-06-19

本文共 5246 字,大约阅读时间需要 17 分钟。

python--集合概念和实战

集合(set)特点

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

创建集合(set)

说明⚠️:

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

使用set创建集合

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

使用 {} 创建集合

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

说明⚠️:

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

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

>>> s3 = {"datagrand",[1,2,'b'],{"name":"python","lang":"chinese"},123}Traceback (most recent call last):  File "
", line 1, in
TypeError: unhashable type: 'dict'>>> s4 = set("'datagrand',[1,2,'b'],{'name':'python','lang':'chinese'},123")>>> s4set(["'", ',', '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”
>>> s1set(['a', 'd', 'i', 'h', 'o', 'z'])>>> s1[2]Traceback (most recent call last):  File "
", line 1, in
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()>>> set1set([])>>> set1.add("zhaodi")   #属于原地修改>>> set1set(['zhaodi'])
>>> set2 = set("python")>>> set2set(['h', 'o', 'n', 'p', 't', 'y'])>>> set2.add("learning")>>> set2set(['h', 'o', 'n', 'p', 't', 'learning', 'y'])

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

set2set(['h', 'o', 'n', 'p', 't', 'learning', 'y'])>>> set2.add([1,2,3])Traceback (most recent call last):  File "
", line 1, in
TypeError: unhashable type: 'list'如果将列表 [1,2,3] 变成 hashable 类型呢?>>> set2.add('[1,2,3]') # 这里的 '[1,2,3]' 就相当于字符串了>>> set2set(['[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是指作为参数的不可变对象,将它和原来的集合组成新的集合,用这个新集合替代原来的集合,如下:

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

合并集合,举例如下:

>>> set1set(['zhaodi'])>>> set2set(['[1,2,3]', 'h', 'o', 'n', 'p', 't', 'learning', 'y'])>>> set2.update(set1) # 把 set1 的元素并入到 set2 中>>> set2set(['[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 删除任意一个集合元素

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

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

>>> set1set(['u', 't', 'w', 'zhaodi'])>>> set1.pop('zhaodi')Traceback (most recent call last):  File "
", line 1, in
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 中的元素,否则就报错。实例如下:

>>> set1set(['u', 't', 'w', 'zhaodi'])>>> set1.remove("wtf") # 没有 “wtf” 这个元素Traceback (most recent call last):  File "
", line 1, in
KeyError: 'wtf'>>> set1.remove("w")>>> set1set(['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)
>>> set1set(['u', 't', 'zhaodi'])>>> set1.discard("u")>>> set1.discard("wtf")>>> set1set(['t', 'zhaodi'])

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

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

实例如下:

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

写在最后的话

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

gitbook版本:

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

python--集合概念和实战(一)

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

你可能感兴趣的文章
微信小程序开发:http请求
查看>>
【netcore基础】.NET Core使用EPPlus实现MVC API里的Excel导出功能 配置中文表头
查看>>
对C++ templates类模板的几点补充(Traits类模板特化)
查看>>
VC++ .net 2005运行库解析
查看>>
转自CSDN:写给25岁以上单身男性的100条忠告
查看>>
经纬度坐标系与UTM MGRS坐标系之间的转换 c# 版本
查看>>
二度社区免费论坛v1.0正式提供下载
查看>>
MSC/VLR/SSP
查看>>
如何连接oracle数据库及故障解决办法
查看>>
工作流 - 技术备忘录
查看>>
void及void指针类型
查看>>
Linux下Socket编程的端口问题( Bind error: Address already in use )
查看>>
C#泛型编程
查看>>
matlab练习程序(纹理合成)
查看>>
关于Silverlight_Tools.exe安装不上的问题
查看>>
Asp.net 实现GridView分页时记录CheckBox状态
查看>>
关于事务
查看>>
实现用户注册验证码
查看>>
WM有约II(九):再谈部署
查看>>
Delegate,Action,Func,匿名方法,匿名委托,事件
查看>>