第十一讲:集合

时间:2019-06-17
本文章向大家介绍第十一讲:集合,主要包括第十一讲:集合使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

集合

概念:

set集合是python中一种基本数据类型,分为可变集合和不可变集合两种。集合是无序不重复元素集,包括创建集合set,向集合中添加元素,删除集合中的元素,求集合的交集,并集,差集等操作。

可变集合:需要的参数必须是迭代器类型,如序列,字典,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串,列表,元素进行去重操作。

不可变集合:集合中的元素不可以被改变,不能做插入和删除操作,其他方法和可变集合基本相同。

1、创建集合:

创建空集合:

s=set()

ss=set([])

st=set(())

创建非空集合:参数必须是序列(字符串,列表,元素),字典,不能是数值类型

#字符串做参数
s1=set('hellopython')
print (s1)

#列表做参数
s2=set([1,2,3,4])
print (s2)

#元素做参数
s3=set((1,2,3,4))
print (s3)

#字典做参数
s4=set({'name':'cwx','age':18})
print(s4)

#set集合做参数 s5
=set(s3) print (s3)

注意:字典转set集合,只取字典的key,相当于将字典中的dict.keys()列表转化成set集合。

2、添加集合元素(add,update)

add():将要添加的元素作为一个整体添加到集合中。
update():把要传入的元素拆分成单个字符,存于集合中,并去掉重复的
#add添加元素,作为一个整体添加到集合中
sTest=set('one')
sTest.add('Two')
print ('add添加后的元素',sTest)

#update添加元素,拆分单个字符,去掉重复字符
sTest1=set('one')
sTest1.update('Two')
print ('update添加后的元素',sTest1)

运行结果:
add添加后的元素 {'Two', 'e', 'o', 'n'}
update添加后的元素 {'e', 'w', 'T', 'o', 'n'}

3、删除集合的元素(remove、discard、pop)

remove:确保元素存在,不存在则抛出KeyError异常

sTest=set('helloy')
sTest.remove('y')
print ('删除后的集合是:',sTest)

sTest.remove('a')
print ('删除后的集合是:',sTest)

运行结果:
删除后的集合是: {'e', 'l', 'h', 'o'}

Traceback (most recent call last):
  File "E:/workplace/2019pratice/practice1.py", line 456, in <module>
    sTest.remove('a')
KeyError: 'a'

discard:如果元素存在则删除,如果不存在则什么也没做,该函数没有返回值

sTest=set('helloy')
sTest.discard('y')
print ('discard删除元素后的集合',sTest)   #元素存在则删除
sTest.discard('a')
print ('discard删除元素后的集合',sTest)   #元素不存在什么也没做

pop:随机删除集合中的某个元素,如集合为空则抛出KeyError异常

sTest=set('helloy')
sTest.pop()
print ('pop删除元素后的集合',sTest)   #随机删除集合中的元素

sTest1=set()
sTest1.pop()
print ('pop删除元素后的集合',sTest)   #集合为空则抛出KeyError异常

运行结果:
pop删除元素后的集合 {'l', 'h', 'y', 'o'}
  File "E:/workplace/2019pratice/practice1.py", line 464, in <module>
    sTest1.pop()
KeyError: 'pop from an empty set'

 clear:清空集合元素

sTest=set('helloy')
sTest.clear()
print ('清空后的集合是',sTest)

运行结果:
清空后的集合是 set()

5、遍历集合

#for遍历集合元素
sTest = set(['e', 'two', 'o', 'n', '1', '3', '2']) for i in sTest: print (i)

运行结果:
2
n
3
1
e
o
two
# 带索引序号的遍历:
sTest = set(['e', 'two', 'o', 'n', '1', '3', '2'])
for index,elem in enumerate(sTest):
    print ('元素的索引是',index,'对应的元素是',elem)

运行结果:
元素的索引是 0 对应的元素是 e
元素的索引是 1 对应的元素是 o
元素的索引是 2 对应的元素是 3
元素的索引是 3 对应的元素是 1
元素的索引是 4 对应的元素是 n
元素的索引是 5 对应的元素是 two
元素的索引是 6 对应的元素是 2

6、集合与序列(字符串,列表,元素)间的转换:(序列转集合,重复会被去掉)

集合与字符串的转换:

testStr = 'python is good'
# 字符串转集合
st=set(testStr)
print ('字符串转集合后:',st)

# 集合转字符串,str()
s=str(st)
print ('集合转字符串后:',s)

# 集合转字符串,join()
s1=''.join(st)
print (s1)


运行结果:
字符串转集合后: {'o', 'p', 'y', 's', 't', 'd', 'h', 'i', 'n', ' ', 'g'}
集合转字符串后: {'o', 'p', 'y', 's', 't', 'd', 'h', 'i', 'n', ' ', 'g'}
opystdhin g

集合与列表的转换:

listTest = [1, 2, 3, 2, 'a', 'b']
# 列表转集合
slist=set(listTest)
print ('列表转集合:',slist)

# 集合转列表
list1=list(slist)
print ('集合转列表:',list1)

运行结果:
列表转集合: {'a', 1, 2, 3, 'b'}
集合转列表: ['a', 1, 2, 3, 'b']

集合与元组的转换:

tupTest = (1, 2, 3, 2, 'a', 'b')
# 元组转集合
stupe=set(tupTest)
print ('列表转集合:',stupe)

# 集合转元组
tupe1=tuple(stupe)
print ('集合转元组:',tupe1)


运行结果:

列表转集合: {1, 2, 3, 'a', 'b'}
集合转元组: (1, 2, 3, 'a', 'b')

练习:结合set对象,列表某个list中所有元素出现的个数

listB=['a','b','c','a','b','a']
for i in set(listB):
    print (i,'出现%d次'%listB.count(i))

运行结果:
a 出现3次
c 出现1次
b 出现2次

7、集合间的操作:交集(&)、并集(|)、差集(-)

交集(&):两个集合共同元素组成的集合

s1=set([1,2,3])
s2=set([1,3,4,5])
print ('两个集合的交集是',s1&s2)     #交集

运行结果:
两个集合的交集是 {1, 3}

并集(|):两个集合所有的,并去掉重复的元素组成的集合

s1=set([1,2,3])
s2=set([1,3,4,5])
print ('两个集合的并集是',s1|s2)     #并集

运行结果:
两个集合的并集是 {1, 2, 3, 4, 5}

差集(-):在集合1但不在集合2中组成的集合

s1=set([1,2,3])
s2=set([1,3,4,5])
print ('两个集合的差集是',s1-s2)     #差集

运行结果:
两个集合的差集是 {2}

8、集合间的运算: >、<、、>=、<=、!=、==(==:判断一个集合是否完全包含另一个集合)

s1=set([1,2,3])
s2=set([1,2,3,4,5])
print (s1>s2)
print (s1<s2)
print (s1==s2)


运行结果:
False
True
False

判断父亲集合函数:issuperset(),等同于>符号

判断是否是子集函数:issubset(),等同于<符号

s1=set([1,2,3])
s2=set([1,3,4,5])
s3=set([1,3])
print (s2.issuperset(s3))
print (s3.issubset(s2))
print (s2.issuperset(s1))
print (s1.issubset(s2))


运行结果:
True
True
False
False

原文地址:https://www.cnblogs.com/wenxiacui/p/11032349.html