设为首页 收藏本站
查看: 997|回复: 0

[经验分享] Python入门笔记(11):集合

[复制链接]

尚未签到

发表于 2015-4-22 09:57:50 | 显示全部楼层 |阅读模式
一、目录
  1、集合概述
  2、关于集合的操作符、关系符号
  3、集合的一系列操作(添加、更新、访问、删除)
  4、关于集合的内建函数、内建方法
  5、小结
二、集合概述
  集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。
  集合元素(set elements):组成集合的成员



1 >>> li=['a','b','c','a']
2 >>> se =set(li)
3 >>> se
4 set(['a', 'c', 'b'])
  集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键



>>> li=[['a','b','c'],['a','c']]
>>> se = set(li)
Traceback (most recent call last):
File "", line 1, in
se = set(li)
TypeError: list objects are unhashable
  集合分类:可变集合、不可变集合
  可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素
  不可变集合(frozenset):与上面恰恰相反
  集合操作符与关系符号:(忘完了!)
DSC0000.png
三、集合的相关操作
  1、创建集合
  由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建



>>> s = set('beginman')
>>> s
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])
>>> t = frozenset('pythonman')
>>> t
frozenset(['a', 'h', 'm', 'o', 'n', 'p', 't', 'y'])
>>> type(s),type(t)
(, )
>>> len(s),len(t)
(7, 8)
>>> s==t
False
>>> s=t
>>> s==t
True
>>>
  2、访问集合
  由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。



>>> 'a' in s
True
>>> 'z' in s
False
>>> for i in s:
print i

a
h
m
o
n
p
t
y
>>>
  3、更新集合
  可使用以下内建方法来更新:
  s.add()
s.update()
s.remove()
  注意只有可变集合才能更新:



>>> s.add(0)
Traceback (most recent call last):
File "", line 1, in
s.add(0)
AttributeError: 'frozenset' object has no attribute 'add'
>>> type(s)

>>> se = set(s)
>>> se
set(['a', 'h', 'm', 'o', 'n', 'p', 't', 'y'])
>>> type(se)

>>> se.add(0)
>>> se
set(['a', 0, 'h', 'm', 'o', 'n', 'p', 't', 'y'])
>>> se.update('MM')
>>> se
set(['a', 0, 'h', 'm', 'o', 'n', 'p', 'M', 't', 'y'])
>>> se.update('Django')
>>> se
set(['a', 0, 'D', 'g', 'h', 'j', 'm', 'o', 'n', 'p', 'M', 't', 'y'])
>>> se.remove('D')
>>> se
set(['a', 0, 'g', 'h', 'j', 'm', 'o', 'n', 'p', 'M', 't', 'y'])
>>>
  del:删除集合本身
四、集合类型操作符
  1、in ,not in
2、集合等价与不等价(==, !=)
3、子集、超集(见上表)



>>> set('shop')>> set('bookshop')>=set('shop')
True
  4、联合(|)
  联合(union)操作与集合的OR操作其实等价的,联合符号有个等价的方法,union()。



>>> s1=set('begin')
>>> s2=set('man')
>>> s3=s1|s2
>>> s3
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])


>>> s1.union(s2)
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])
  但+ 运算则不适合:



>>> s3New = s1+s2
Traceback (most recent call last):
File "", line 1, in
s3New = s1+s2
TypeError: unsupported operand type(s) for +: 'set' and 'set'
  5、交集(&)
  与集合AND等价,交集符号的等价方法是intersection()



>>> s1&s2
set(['n'])
>>> s1.intersection(s2)
set(['n'])
  6、查补(-)
等价方法是difference()



>>> s1-s2
set(['i', 'b', 'e', 'g'])
>>> s1.difference(s2)
set(['i', 'b', 'e', 'g'])
  7、对称差分(^)
  对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法symmetric_difference()



>>> s1^s2
set(['a', 'b', 'e', 'g', 'i', 'm'])
>>> s1.symmetric_difference(s2)
set(['a', 'b', 'e', 'g', 'i', 'm'])
  注意:集合之间and,or



>>> s1 and s2
set(['a', 'm', 'n'])   #取 s2
>>> s1 or s2
set(['i', 'b', 'e', 'g', 'n']) #取 s1
>>>
五、集合、列表、元组、字符串之间转换



>>> list(s1)
['i', 'b', 'e', 'g', 'n']
>>> str(s1)
"set(['i', 'b', 'e', 'g', 'n'])"
>>> tuple(s1)
('i', 'b', 'e', 'g', 'n')
应用:



'''最简单的去重方式'''
lis = [1,2,3,4,1,2,3,4]
print list(set(lis))    #[1, 2, 3, 4]
六、关于集合的内建函数、内建方法
  1、len():返回集合元素个数
  2、set()、frozenset()工厂函数
  3、所有集合方法:
DSC0001.png
  4、仅适合可变集合
DSC0002.png
DSC0003.png
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59510-1-1.html 上篇帖子: python的复制与引用 下篇帖子: 【python爬虫】根据查询词爬取网站返回结果
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表