美文网首页
python学习笔记24_集合set( )

python学习笔记24_集合set( )

作者: flamingocc | 来源:发表于2018-03-16 20:50 被阅读0次

python 笔记24

集合 set

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。

集合元素(set elements):组成集合的成员(不可重复)

li=[1,2,'a','b']
s =set(li)
print(s)    

输出: {1, 2, 'a', 'b'}
 
li2=[1,2,1,'a','a']
s=set(li2)
print(s)  

输出: {1, 2, 'a'}

集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键
但是可变集合整体却是不可哈希的

li=[[1,2],'a','b']
s =set(li) #TypeError: unhashable type: 'list'
print(s)

这里[1,2]是不可哈希的,所以会报错。
(回顾:列表和字典是不可哈希的)


既然集合是无序的,那么怎么获取数据呢?

方法一:放进for循环遍历。
方法二:放进迭代器(后面会讲)。


集合分类:可变集合、不可变集合

可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素

不可变集合(frozenset):与上面恰恰相反

li=[1,'a','b']
s =set(li)
dic={s:'123'} 

输出:
TypeError: unhashable type: 'set'

集合的相关操作

1、创建集合

由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建

s1 = set('alvin') 
s2= frozenset('yuan')
print(s1,type(s1))  
print(s2,type(s2)) 

输出:
    {'l', 'v', 'i', 'a', 'n'} <class 'set'>
    frozenset({'n', 'y', 'a', 'u'}) <class 'frozenset'>

2、访问集合

由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。

s1 = set('alvin')
print('a' in s1)
print('b' in s1)

for i in s1:
    print(i)

输出:
    
 True
 False
 i
 a
 n
 v
 l

3、更新集合

可使用以下内建方法来更新:

s.add() #加单个元素,写什么添加什么
s.update() #加多个元素,把每个序列都添加进去
s.remove() #移除某个元素

注意只有可变集合才能更新:

s2=set('alvin')
s2.add('mm')
print(s2) 
 
s2.update('HO') 
print(s2) 
s2.update([12,'Flamingo'])  

#  添加列表也是讲列表中的每个元素加进集合中,而不会将12分解成1和2,或将flamingo分解成f,l,a,m,i,n,g,o。

print(s2)
s2.remove('l')
print(s2)  

输出: 
{'a', 'n', 'l', 'i', 'v', 'mm'}
{'a', 'H', 'n', 'l', 'i', 'O', 'v', 'mm'}
{'a', 'H', 12, 'n', 'Flamingo', 'l', 'i', 'O', 'v', 'mm'}
{'a', 'H', 12, 'n', 'Flamingo', 'i', 'O', 'v', 'mm'}

注意:s2.update(12,'Flamingo')这种写法则是错误的。

4、删除

s2.pop( ) #随机删除一个元素
s2.clear( ) #清空列表,保留集合这个容器
del s2 #删除整个集合


集合类型操作符

1 in ,not in
2 集合等价与不等价(==, !=)
3 子集、超集

在了解集合相关操作符号之前,我们先明确一下数学概念:


父级子级判定

相关文章

网友评论

      本文标题:python学习笔记24_集合set( )

      本文链接:https://www.haomeiwen.com/subject/tcgrqftx.html