Python有3大数据类型,列表,字典和聚集,列表和字典前面我都讲过了,今天我们来聊聊Python中的聚集.

Python的书内里完整周全讲聚集的不多,纵然有的也只是简朴带过,文字不多。大部分先容Python数据结构都是被列表,字典两大网红遮盖了锋芒.貌似聚集在Python的天下里很冷门,实在聚集内里的器械很有用,有它特定的适用的场景,稀奇是在数据处理的时刻.大显身手.

那么提及聚集,很多人一定想到了聚集论内里聚集,对的Python就是把这个观点引入的。Python中的聚集有两种类型,可变聚集和不可变聚集.

1.聚集先容
聚集与列表([])和字典({})差别,没有稀奇的语法花样.列表和字典可以划分用他们自己的工厂方式list()和dict()建立,聚集只有一种方式也是唯一的方式-聚集的工厂方式set()和frozenset():

  • set()
    set无序排序且不重复,是可变的,有add(),remove()等方式。既然是可变的,以是它不存在哈希值。基本功能包罗关系测试和消除重复元素. 聚集工具还支持union(团结), intersection(交集), difference(差集)和sy *** metric difference(对称差集)等数学运算.

  • frozenset()
    rozenset是冻结的聚集,它是不可变的,存在哈希值,利益是它可以作为字典的key,也可以作为其它聚集的元素。瑕玷是一旦建立便不能更改,没有add,remove方式。

下图列出所有聚集里的操作符

1).聚集赋值

仔细的同砚一定发现为啥少了几个字母,两个重复的o,三个重复的l,怎么都只泛起了1个。对的,这是聚集一个异常重要的观点
去重复,异常有用,稀奇是在去掉列表内里的重复元素的时刻,一招搞定。真是一招鲜,吃遍天,列如:

print set(['a','c','c','z','y','a','b'])

set(['a', 'y', 'c', 'z', 'b'])#去掉了重复的元素
.

2).若何接见聚集中的值
检查某个元素是不是在聚集内里 #in 和not in

遍历查看聚集成员#for

for element in s:
  print element

3).更新和删除

s.add('z')
print s

set(['e', 'd', 'H', 'l', 'o', 'r', 'W', 'z'])#多了个'z'

s.remove('W')
print s

set(['e', 'd', 'H', 'l', 'o', 'r', 'z'])#去掉了W

2.聚集几大常见的操作招式
1)联和,合并

,

环球UG

www.allbetgame.us欢迎进入环球UG官网(UG环球),环球UG官方网站:www.ugbet.net开放环球UG网址访问、环球UG会员注册、环球UG *** 申请、环球UG电脑客户端、环球UG手机版下载等业务。

,
s=set('123')
print s
>>set(['1', '3', '2'])
t=set('345')
print t
>>set(['3', '5', '4'])

print s|t
>>set(['1', '3', '2', '5', '4'])//s和t并集是有所有s的元素和所有t的元素

2).交集//类似聚集的合取操作

s=set('123')
print s
>>set(['1', '3', '2'])
t=set('345')
print t
>>set(['3', '5', '4'])

print s&t
>>set(['3'])


3).差补//相对补集
两个聚集s和t的差补,示意新的聚集只属于s,而不属于t

s=set('123')
print s
>>set(['1', '3', '2'])
t=set('345')
print t
>>set(['3', '5', '4'])

print s-t
>>set(['1', '2'])
print t-s
>>set(['5', '4'])

4).对称差分//类似聚集中的异或

s=set('123')
print s
>>set(['1', '3', '2'])
t=set('345')
print t
>>set(['3', '5', '4'])

print s^t
>>set(['1', '2', '5', '4'])

结论:
说了这么多,举个小例子就知道聚集的威力,好比我们有3个列表划分是2014,2015,2016的更佳学生,好比:
students_2014=['jack','james','lisa','leo','tom','wang','lee']
students_2015=['jane','james','sean','leo','wang','lari']
students_2016=['sam','max','larisa','Yan','leo','jack']

我们想知道谁是延续2014,2015更佳学生
print set(students_2014)&set(students_2015)

set(['james', 'wang', 'leo'])

我们想知道谁是延续2014,2015,2016更佳学生
print set(students_2014)&set(students_2015)&set(students_2016)

set(['leo'])

我们想知道谁2014是更佳学生,然则后两年没有好好学,没有进入2015,2016更佳名单
print set(students_2014)-set(students_2015)-set(students_2016)

set(['lisa', 'lee', 'tom'])

设想若是列表是1000个元素,用这招过滤是不是很简朴