【python入门篇——16】集合(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)

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

可变集合(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))  #{'l', 'v', 'i', 'a', 'n'} <class 'set'>
print(s2,type(s2))  #frozenset({'n', 'y', 'a', 'u'}) <class 'frozenset'>

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

s1 = set('zhang')
print('a' in s1)
print('b' in s1)
for i in s1:
    print(i)

#    
# True
# False
# z
# h
# a
# n
# g

3、更新集合
可使用以下内建方法来更新:

s.add()
s.update()
s.remove()

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

# s1 = frozenset('zhang')
# s1.add(0)  #AttributeError: 'frozenset' object has no attribute 'add'
 
s2=set('zhang')
s2.add('mm')
print(s2)  #{'n', 'g', 'mm', 'z', 'a', 'h'}
 
s2.update('HO')#添加多个元素
print(s2)  #{'n', 'z', 'H', 'O', 'h', 'a', 'g'}
 
s2.remove('h')
print(s2)  #{'z', 'n', 'g', 'a'}

del:删除集合本身

** 四、集合类型操作符**

  1. in ,not in
  2. 集合等价与不等价(==, !=)
  3. 子集、超集
s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
print(2 in s1)      # True
print(s1 < s2)      # False
  1. 联合(|): 联合(union)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()。
s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
print(s1 | s2)      #{1, 2, 3, 4, 5, 6, 7, 8}
print(s1.union(s2))     #{1, 2, 3, 4, 5, 6, 7, 8}
  1. 交集(&)

与集合and等价,交集符号的等价方法是intersection()

s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
print(s1 & s2)      #{4, 5}
print(s1.intersection(s2))      #{4, 5}
  1. 差集(-)
    等价方法是difference()
s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
print(s1 - s2)      #{1, 2, 3}
print(s2 - s1)      #{8, 6, 7}
print(s1.difference(s2))      #{1, 2, 3}
  1. 对称差集(^)

对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法symmetric_difference()

s1 = set([1, 2, 3, 4, 5])
s2 = set([4, 5, 6, 7, 8])
print(s1 ^ s2)      #{1, 2, 3, 6, 7, 8}
print(s1.symmetric_difference(s2))      #{1, 2, 3, 6, 7, 8}

**应用:

'''最简单的去重方式'''
lis = [1,2,3,4,1,2,3,4]
print list(set(lis))    #[1, 2, 3, 4]
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值