python学习-十二-集合

一.集合定义
1.set是Python中一种基本数据类型,它分为可变集合(set)和不可变集合(frozenset)两
种。类似于其他语言, 集合是一个无序不重复元素集,包括创建集合set、向集合中添加元
素、删除集合中的元素、求集合的交集、并集、差集等操作。
2.可变集合:
set集合类需要的参数必须是迭代器类型的,如:序列、字典等,然后转换成
无序不重复的元素集。由于集合是不重复的,所以可以对字符串、列表、元组
进行去重操作。
3.不可变集合:
集合中的元素不可以被改变,不能做插入和删除操作,其他方法和可变集合基本相同。
frozenset([1, 2, 3])

二.集合操作—创建集合
1.
创建空的集合:
#coding=utf-8
#创建空集合
s = set()
print s
ss = set([])
print ss
st = set(())
print st
2.
>>> a=set("ab")
>>> a
set(['a', 'b'])
>>> a.update("cd")
>>> a
set(['a', 'c', 'b', 'd'])
>>> a.add('ef')
>>> a
set(['a', 'c', 'b', 'ef', 'd'])
>>>

2.创建非空集合:
集合中set括号中需要的参数的数据类型有: 序列(包括字符串、列表、元组),字典可以转为集合,
注意数值类型不能作为集合的参数,如int类型。
#coding=utf-8
# 字符串做参数
s = set('createSet')
print s
# list做参数
s1 = set([1,2,3,1,3,4,5])
print s1
# 元组做参数
s2 = set((1,2,3,4,1))
print s2
# 字典做参数
#注意:字典转set集合,需要注意的是,只取了字典的key,相当于将字典中的
dict.keys()列表转成set集合。
s3 = set({1:2,2:3})
print s3
# set集合做参数
st = set([2, 1, 3, 4, 5, 1, 12])
ss = set(st)

3.集合操作—添加集合元素
集合的添加有两种方式,分别是add和update。但是它们在添加元素时是有区
别的。
add()方法是将要添加的元素作为一个整体添加到集合中。
update()方法是把要传入的元素拆分成单个字符,存于集合中,并去掉重复的
代码示例:
#coding=utf-8
#创建一个集合
sTest = set('one')
print u"初始集合:", sTest
#添加一个'two'元素,并查看结果
sTest.add('two')
print u"添加元素后的集合:", sTest

代码示例:
#coding=utf-8
#创建一个集合
sTest = set('one')
print u"初始集合:", sTest
#添加一个'two'元素,并查看结果
sTest.update('two')
print u"添加元素后的集合:",
sTest

4.集合操作—集合删除
集合的删除操作使用的方法跟列表是一样的,使用的也是remove方法。
#coding=utf-8
s = set('hello') #声明一个可变数组
print u"删除前的集合:", s
try :
s.remove('h')
except KeyError, e :
print u"集合中不存在该元素!“
except:
print
else :
print u"集合中元素删除成功!"
print u"删除某元素后的集合:", s

5.集合操作—遍历
#coding=utf-8
sTest = set(['e', 'two', 'o', 'n', '1', '3', '2'])
#遍历集合
for i in sTest :
print i,
--------------
带索引序号的遍历:
#coding=utf-8
sTest = set(['e', 'two', 'o', 'n', '1', '3', '2'])
#遍历集合
for index, elem in enumerate(sTest) :
print u"元素的索引号为:", index, u"对应的元素为:", elem

6.集合操作—集合与序列间的转换
集合和序列之间的转换跟序列之间互转是一样的,唯一不同的就是序列转成集合后,重复的元素被去掉了
代码示例:字符串与集合互转
#coding=utf-8
testStr = 'python is good'
# 字符串转集合
st = set(testStr)
print u"字符串转集合后:", st

集合转字符串时,直接使用str()函数进行转换,得到的将是集合的字符串形式。要想真正转成字符串,我们需要借助字符串连接函数join()函数来完成。
#coding=utf-8
testStr = 'python is good'
# 字符串转集合
st = set(testStr)
#print u"字符串转集合后:", st
# 集合转字符串,join()
s1 = ''.join(st)
print s1

7.集合操作—集合与列表互转
#coding=utf-8
listTest = [1, 2, 3, 2, 'a', 'b']
# 列表转集合
sList = set(listTest)
print sList
# 集合转列表
list1 = list(sList)
print list1

8.集合操作—元组与集合互转
#coding=utf-8
tupTest = (1, 2, 3, 2, 'a', 'b', 'a')
# 元组转集合
sTup = set(tupTest)
print sTup
# 集合转元组
tup = tuple(sTup)
print tup

9.集合操作—查找元素并删除
函数原型:
setVar.discard(element)
参数说明:
setVar :为一个set类型的变量
element :表示要查找并删除的元素
函数作用:
在集合setVar中查找element元素,如果存在则删除;如果没找到,则什么也不做。该函数没有返回值

#coding=utf-8
sList = set([1, 2, 3, 4, 5])
#在集合中查找元素1,找到后删除,不返
sList.discard(1)
print sList

10.集合操作—pop函数
函数原型:
s.pop()
参数说明:
s:为set类型的变量
函数作用:
删除并返回集合s中的第一个元素,如果为空引发KeyError错误
#coding=utf-8
sList = set([1, 2, 3, 4, 5])
#在集合中查找第一个元素,找到后删除并返回
element = sList.pop()
print element

11.集合操作—clear、copy和len函数
clear 方法用于清空集合中的所有元素.
代码示例:
#coding=utf-8
sList = set([1, 2, 3, 4, 5])
#清空集合
sList.clear()
print sList

copy方法用于集合拷贝
代码示例:
#coding=utf-8
s1 = set([1, 2, 3, 4, 5])
print u"集合s1的内存地
址为:", id(s1)
s2 = s1.copy()
print u"拷贝后的集合
s2:", s2
print u"集合s2的内存地
址为:", id(s2)

len函数跟求序列的长度的函数len()是一样的,返回的是集合中有多少个元素。
#coding=utf-8
s1 = set([1, 2, 3,4, 5])
len = len(s1)
print u"集合的长
度为:", len

11.集合操作—交集
Python中求集合的交集使用的符号是“&”,返回两个集合的共同元素组成的集合,即集合的交集。
代码示例:
#coding=utf-8
st1 = set('python')
print u"集合1:", st1
st2 = set('htc')
print u"集合2:", st2
# 两集合求交集
st3 = st1 & st2
print u"两集合求交集的结果:", st3

12.集合操作—并集
Python中求集合的并集用的是符号“|”,返回的是两个集合所有
的并去掉重复的元素组成的集合。
#coding=utf-8
st1 = set('python')
print u"集合1:", st1
st2 = set('htc')
print u"集合2:", st2
# 两集合求并集
st3 = st1 | st2
print u"两集合求并集的结果:", st3

13.集合操作—差集
Python中差集使用的符号是减号“-”,返回的是在集合1但不在集合
2中的元素组成的集合。
#coding=utf-8
st1 = set('python')
print u"集合1:", st1
st2 = set('htc')
print u"集合2:", st2
# 两集合求差集
st3 = st1 - st2
print u"两集合求差集的结果:",st3

14.集合操作—两个集合的不同之处
查看两个集合的不同之处, 使用的difference函数,等价于差集。如:s1.difference(s2)
这种不同指的是集合s1相对于集合s2,不同的地方,也就是所有在集合s1中,
而不再集合s2中的的元素组成的新集合。
#coding=utf-8
st1 = set('python')
print u"集合1:", st1
st2 = set('htc')
print u"集合2:", st2
# 查看两集合的不同
st3 = st1.difference(st2)
print u"集合st1与st2的不同:", st3

15.集合操作—运算符判断集合间关系
集合可以使用大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=)来判断某个集合是否完全包含于另一个集合,也可以使用子父集判断函数。
有如下三个集合:
#coding=utf-8
s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4])
s3 = set(['1', '8', '9', '5'])
'''
大于(>)或大于等于(>=),
表示左边集合是否完全包含右边集合,
如集合s1是否完全包含集合s2。
'''
if s1 > s2 :
print u"集合s1完全包含集合s2"
else :
print u"集合s1不完全包含集合s2"

'''小于(<)或小于等于(<=),
表示左边的集合是否完全包含于右边的集
合,
如集合s1是否完全包含于集合s2。
'''
if s2 < s1 :
print u"集合s2完全包含于集合s1"
else :
print u"集合s2不完全包含于集合s1"
'''
等于(==)、不等于(!=),
判断两个集合是否完全相同。
'''
if s1 == s3 :
print u"集合s1与集合s3完全相同"
else :
print u"集合s1与集合s3不相同"

16.集合操作—函数判断集合间关系
issuperset方法所用是判断集合st1是否是集合st2的父集,如果是返回
True,否则返回False。
代码示例:
#coding=utf-8
s1 = set([1, 2, 3, 4, 5])
s2 = set([2, 3])
if s1.issuperset(s2) :
print u"集合s1是集合s2的父集"
else :
print u"集合s1不是集合s2的父集"

函数的作用是判断集合s1是否是集合s2的子集,如果是返回True,否则返
回False。
代码示例:
#coding=utf-8
s1 = set([1, 2, 3, 4, 5])
s2 = set([2, 3])
if s1.issubset(s2) :
print u"集合s1是集合s2的子集"
else :
print u"集合s1不是集合s2的子集"

17.集合操作—集合的成员运算符
集合里也可以使用成员运算符,in和not in,判断某个对象是
否是集合中的成员。
代码示例:
#coding=utf-8
s1 = set([1, 2, 3, 4, 5])
if 1 in s1 :
print u"1是集合的成员!"
else :
print u"1不是集合的成员!"

18.集合操作—不可变集合
Python中还有一种不可改变的集合,那就是 frozenset,不像set集合,可以增加删除集合中的元素,该集合中的内容是不可改变的,类似于字符串、元组。如果试图改变不可变集合中的元素,就会报AttributeError错误。不可变集合,除了内容不能更改外,其他功能及操作跟可变集合set一样,不在赘述,自行练习。
代码示例:
#coding=utf-8
f1 = frozenset('python')
print f1
f2 = frozenset([1,2,3,2,44,3])
print f2

猜你喜欢

转载自blog.csdn.net/qq_30758629/article/details/79210137