#Python中set详解

Python中set

set:类似dict,是一组key的集合, 不存储value
本质:无序和无重复的集合
创建set需要一个list或者tuple或者dict作为输入集合
重复元素在set中会自动过滤,例如:

s1 = set([1,2,3,4,5,4,5])
print(s1)
#(输出){1, 2, 3, 4, 5}
s2 = set((1,2,3,3,2,1))
print(s2)
#(输出){1, 2, 3}
s3 = set({1:"good",3:"nice"})
print(s3)
#(输出){1, 3}

1.(set).add添加

s4 = set([1,2,3,4,5])
s4.add(6)
s4.add(5)			#可添加重复的, 但是不会有效果
print(s4)
#(输出){1, 2, 3, 4, 5, 6}

注意:
s4.add([7,8,9]) 	#set的数据是不可变的 list 列表是可变的 不能存入
#(输出)TypeError: unhashable type: 'list'	 (不可用类型列表)

s4.add({1:"a"})		#同理dict字典是可变的  不能存入
#(输出)TypeError: unhashable type: 'dict'  (不可用类型字典)

2.插入整个list,tuple,字符串

s5 = set([1,2,3,4,5])
s5.update([6,7,8])
s5.update((9,10))
s5.update("sunck")
print(s5)
#(输出){'c', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'u', 'k', 's', 'n'}
#无序的 不能用下标取

3.(set).remove()删除
指定删除字符,不讲顺序

s6 = set([1,2,9,0,8,3,4,5])
s6.remove(3)#指定删除字符,不讲顺序
print(s6)
#(输出){0, 1, 2, 4, 5, 8, 9}

4.遍历set
指定删除字符,不讲顺序

s7 = set([1,2,6,7,3,4,5])
for i in s7:
    print(i)
#(输出)	1
		2
		3
		4
		5
		6
		7
#set 没有索引,比如:
print(s7[3])
#(输出)TypeError: 'set' object does not support indexing
#(输出)TypeError:'set'对象不支持索引

但是也可以遍历出来,虽然那样没什么实际意义。
for index,data in enumerate(s7):			 # index(下标),data(元素)
    print(index,data)
#(输出)	0 1
		1 2
		2 3
		3 4
		4 5
		5 6
		6 7

5.(set)交集
指定删除字符,不讲顺序

s8 = set([1,2,3])
s9 = set([2,3,4])
a1 = s8 & s9
print(a1)
#(输出){2, 3}
print(type(a1)) #type查看类型
#(输出)<class 'set'>

6.(set)并集
指定删除字符,不讲顺序

s8 = set([1,2,3])
s9 = set([2,3,4])
a2 = s8 | s9
print(a2)
#(输出){1, 2, 3, 4}

7.(set).clear()清空集合

name = {'d', 's'}
name.clear()
print(name)
#(输出)set()

8.(set). discard()移除元素

name = {'sd', 'd', 's'}
name.discard('s')
print(name)
#(输出){'sd', 'd'}

9.(set). discard()
功能:判断是否是子集

li = {'s', 'd'}
name = {'sd', 'd', 's'}
print(name.issubset(li))  	#判断name是不是li的子集
#(输出)False
print(li.issubset(name) )	 #判断li是不是name的子集
#(输出)True

10.(set). discard()
功能:判断是否是父集

li = {'s', 'd'}
name = {'sd', 'd', 's'}
print(name.issuperset(li))  	#判断name是不是li的父集
#(输出)True
print(li.issuperset(name) )	 #判断li是不是name的父集
#(输出)False

11.(set). intersection()
功能:取交集,更新原来的set集合

li = ('s', 'd')
name = {'sd', 'd', 's'}
a1=name.intersection(li)
print(a1)
#(输出){'s', 'd'}
print(li)
#(输出)('s', 'd')
print(name)
#(输出){'s', 'sd', 'd'}

12.(set). intersection_update()
功能:取交集,更新原来的set集合

li = ('s', 'd',"a")
name = {'sd', 'd', 's'}
name.intersection_update(li)
print(name)
#(输出){'d', 's'}

13.(set). difference()
功能:求两个集合的差集,结果集合中包含所有属于第一个集合但不属于第二个集合的元素。

li = ('a', 's')
name = {'ad', 'a', 's'}
a1=name.difference(li)
print(a1)
#(输出){'ad'}

14.(set). difference_update()
功能:删除当前set中的所有包含在 new set 里的元素

li = ('a', 's')
name = {'ad', 'a', 's'}
name.difference_update(li)
print(name)
#(输出){'ad'}

15.(set). copy()
功能:浅拷贝

name = {'sd', 'd', 's'}
a1= name.copy()
print(a1)
#(输出){'sd', 'd', 's'}

猜你喜欢

转载自blog.csdn.net/weixin_43097301/article/details/82946049
今日推荐