Python中的集合类型操作符例子

(1)标准类型操作符(所有的集合类型)

成员关系 (in, not in)
        就序列而言,Python中的in和not in操作符决定某个元素是否是一个集合中的成员。
集合等价/不等价
        等价/不等价被用于在相同或不同的集合之间做比较。两个集合相等是指,对每个集合而言,当且仅当其中一个集合中的每个成员同时也是另一个集合中的成员。也可以说每个集合必须是另一个集合的一个子集, 即s <= t 和s>= t 的值均为真(True),或(s <= t and s>= t) 的值为真(True)。集合等价/不等价与集合的类型或集合成员的顺序无关,只与集合的元素有关。
子集/超集
        set用Python的比较操作符检查某集合是否是其他集合的超集或子集。“小于”符号(<、<=)用来判断子集,“大于”符号(>、 >= )用来判断超集。“小于” 和 “大于”意味着两个集合在比较时不能相等。等于号允许非严格定义的子集和超集。
        set支持严格( < )子集和非严格 ( <= ) 子集,也支持严格( > )超集和非严格 ( >= )超集。只有当第一个集合是第二个集合的严格子集时,我们才称第一个集合“小于”第二个集合。同理,只有当第一个集合是第二个集合的严格超集时,我们才称第一个集合“大于”第二个集合。

    对象值的比较

任何相同类型的对象都可以比较,格式为:a == b,在python2.3之前类型不具有布尔值,返回值为1 0;2.3版本之后返回只为 True False

    对象身份的比较

obj1 is obj2  --obj 与obj2是同一个对象  return True False

obj1 is not obj2 --obj 与obj2是同一个对象  return True False

    布尔类型--python中的与、或、非

布尔类型的优先级依次为:not

             and

            or
--实现功能为逻辑 非 与 或

标准类型的内建函数

cmp(obj1, obj2)--1>2 return i>0
 
          1<2 return i<0
 
          1==2 return i=0
repr(obj)/repr('obj')--返回一个对象的字符串表示

str(obj)--返回对象可读性好的字符串表示

type(obj)--返回对象的类型

(2)集合类型操作符(所有的集合类型)
联合( | )
        联合(union)操作和集合的 OR(又称可兼析取(inclusive disjunction))其实是等价的,两个集合的联合是一个新集合,该集合中的每个元素都至少是其中一个集合的成员,即属于两个集合其中之一的成员。联合符号有一个等价的方法:union()。
交集( & )
       可以把交集操作比做集合的AND(或合取)操作。两个集合的交集是一个新集合,该集合中的每个元素同时是两个集合中的成员,即属于两个集合的成员。交集符号有一个等价的方法:intersection()。
差补/相对补集( – )
        两个集合(s 和 t)的差补或相对补集是指一个集合 C,该集合中的元素,只属于集合 s,而不属于集合 t。差符号有一个等价的方法:difference()。
对称差分( ^ )
       和其他的布尔集合操作相似,对称差分是集合的XOR(又称“异或” (exclusive disjunction))。两个集合(s 和 t)的对称差分是指另外一个集合C,该集合中的元素,只能是属于集合 s 或者集合t的成员,不能同时属于两个集合。对称差分有一个等价的方法:symmetric_difference()。
混合集合类型操作
        如果左右两个操作数的类型相同,既都是可变集合或不可变集合,则所产生的结果类型是相同的。但如果左右两个操作数的类型不相同(左操作数是 set,右操作数是 frozenset,或相反情况),则所产生的结果类型与左操作数的类型相同 。

       注意:加号不是集合类型的运算符。

>>> t | s 
frozenset(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's']) 
>>> t ^ s 
frozenset(['c', 'b', 'e', 'k', 'p']) 
>>> s | t 
set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's']) 
>>> s ^ t 
set(['p', 'b', 'e', 'k', 'c'])
(3)集合类型操作符(仅适用于可变集合)
(Union) Update ( |= )
       这个更新方法从已存在的集合中添加(可能多个)成员,此方法和update()等价。

>>> s = set('cheeseshop') 
>>> s |= set('pypi') 
>>> s 
set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y'])

保留/交集更新( &= )

保留(或交集更新)操作保留与其他集合的共有成员,此方法和 intersection_update()等价。
差更新 ( –= )

对集合s和t进行差更新操作s-=t,差更新操作会返回一个集合,该集合中的成员是集合s去除掉集合t中元素后剩余的元素。此方法

和difference_update()等价。
对称差分更新( ^= )

对集合s和t进行对称差分更新操作(s^=t),对称差分更新操作会返回一个集合,该集合中的成员仅是原集合s或仅是另一集合t中的成员。此方法和symmetric_difference_update()等价

 

集合类型的实际操作:

(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 
...  





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字典对集合类型的实际应用步骤

时间: 2024-09-13 12:04:33

Python中的集合类型操作符例子的相关文章

Python中实现参数类型检查的简单方法

  这篇文章主要介绍了Python中实现参数类型检查的简单方法,本文讲解使用装饰器实现参数类型检查并给出代码实例,需要的朋友可以参考下 Python是一门弱类型语言,很多从C/C++转过来的朋友起初不是很适应.比如,在声明一个函数时,不能指定参数的类型.用C做类比,那就是所有参数都是void*类型!void类型强制转换在C++中被广泛地认为是个坏习惯,不到万不得已是不会使用的. Python自然没有类型强制转换一说了,因为它是动态语言.首先,所有对象都从Object继承而来,其次,它有强大的内省

Python 中方法参数 * 和 ** 的例子

在Python中* 和 ** 有特殊含义,他们与函数有关,在函数被调用时和函数声明时有着不同的行为.此处*号不代表C/C++的指针. 其中 * 表示的是元祖或是列表,而 ** 则表示字典 以下为 ** 的例子: 01 #--------------------第一种方式----------------------# 02 import httplib 03 def check_web_server(host,port,path): 04  h = httplib.HTTPConnection(h

Python中实现字符串类型与字典类型相互转换的方法_python

本文以实例形式简述了Python中字符串类型与字典类型相互转换的方法,是比较实用的功能.具体方法如下: 一.字典(dict)转为字符串(string) 我们可以比较容易的将字典(dict)类型转为字符串(string)类型. 通过遍历dict中的所有元素就可以实现字典到字符串的转换: for key, value in sample_dic.items(): print "\"%s\":\"%s\"" % (key, value) 二.字符串(s

Python中实现参数类型检查的简单方法_python

Python是一门弱类型语言,很多从C/C++转过来的朋友起初不是很适应.比如,在声明一个函数时,不能指定参数的类型.用C做类比,那就是所有参数都是void*类型!void类型强制转换在C++中被广泛地认为是个坏习惯,不到万不得已是不会使用的. Python自然没有类型强制转换一说了,因为它是动态语言.首先,所有对象都从Object继承而来,其次,它有强大的内省,如果调用某个不存在的方法会有异常抛出.大多数情况,我们都不需要做参数类型栓查,除了一些特殊情况.例如,某个函数接受一个str类型,结果

Python中的CURL PycURL使用例子_python

在Linux上有个常用的命令 curl(非常好用),支持curl的就是大名鼎鼎的libcurl库:libcurl是功能强大的,而且是非常高效的函数库.libcurl除了提供本身的C API之外,还有多达40种编程语言的Binding,这里介绍的PycURL就是libcurl的Python binding.在Python中对网页进行GET/POST等请求,当需要考虑高性能的时候,libcurl是非常不错的选择,一般来说会比liburl.liburl2快不少,可能也会比Requests的效率更高.特

Python中使用SMTP发送邮件的例子

一,SMTP发送邮件 这里PYTHON脚本实现的是登陆126的SMTP将邮件发送到QQ邮箱.QQ邮箱利用的是加密STMP, 需要加密版本的童鞋请关注随后的更新.TIPS: 我的本地环境是MAC系统, Windows环境需要修改相应的字符编码. #!/usr/bin/env python # -*- coding: utf-8 -*- import smtplib   import email.encoders from email.mime.text import MIMEText from e

PYTHON中字典GET方法小例子

Python定义一个字典:dict = {'iphone':'apple','xiaomi','xiaomi','huawei':'hua'},那么我要查找键名为xiaomi对应的值,如果我们知道存在这个键,直接dict['xiaomi']就好了,但是要判断有没有这个键存在怎么办呢? 如图,判断roledict中有没有owner这个键,第一个方法:   if 'owner' in roledict:  owner = roledict['owner'] else:  owner = admin

Python回顾与整理5:映像和集合类型

0.说明         依然是按照前面介绍的几种序列类型的思路来总结字映像类型和集合类型,即先做一个介绍,再讨论可用操作符.工厂函数.内建函数和方法. 1.映射类型:字典         映射类型被称做哈希表,而Python中的字典对象就是哈希类型,即它是按照这样的方式来存储数据:(哈希表的算法)是获取键,对键执行一个叫做哈希函数的操作,并根据计算的结果,选择在数据结构的某个地址中来存储对象的值.任何一个值存储的地址取决于它的键,正因为这种随意性,哈希表中的值是没有顺序的,所以Python中的

Python中使用Boolean操作符做真值测试实例_python

在Python中,任何类型的对象都可以做真值测试,并且保证返回True或者False. 以下几种值(不论类型)在真值测试中返回False: 1.None 2.False 3.任何类型的数字0,包括0,0.0,0L,0j 4.空的序列(sequence)或者映射(mapping)类型对象 5.对于用户自定义类型的对象,如果其类定义了__nonzero__() 或者 __len__()特殊方法并且返回False或者0 对于最后一条规则,有几点需要说明: 1.如果类没有定义这两个方法中的任何一个,则这