今天要讲的集合是和咱们以前讲过的字符串,列表,元组,字典同样,也是一种数据类型,用 set 表示,翻译成中文叫“集合”。若是以前的数据类型忘记了,能够经过下面的链接去看。java
零基础学习 Python 之字符串python
零基础学习 Python 之元组bash
集合的特色是元素无次序,不可重复,有的可变,有的不可变。咱们以前写元组的时候说过它是列表的部分特征和字符串的部分特征的并集,那么这里的集合就是列表的部分特征和字典的部分特征的并集。学习
建立集合有两种方法,一种是 set(),一种是 { },在这里的话咱们不推荐使用后一种,由于咱们已经把 { } 给了字典,要避免歧义,在这里说后一种方法的缘由是但愿你知道有这么一种方法创建集合,省得在某个地方看到的时候你会奇怪为何字典的格式不对,其实它多是集合。ui
>>> a = set("leey")
>>> a
set(['y', 'e', 'l'])
>>> b = set(['python','c++','java','c++'])
>>> b
set(['python', 'java', 'c++'])
>>> c = {'a','b','c','a'}
>>> c
set(['a', 'c', 'b'])
复制代码
看到上面的例子了吗?输出无序,重复的元素也被去掉,这是一种很是简洁高效的元素去重方式。spa
集合的方法有不少,还记得怎么看吗?用 dir(set) 就能够看到很多集合的方法,每一个函数的具体使用方法能够用 help() 找到,我在这里主要讲几个经常使用的。翻译
1.add & update3d
add 是在集合中添加元素,在这里有一点要注意创建空集合的时候要用 set 而不是 { },请看下面的例子:
>>> a = {}
>>> type(a)
<type 'dict'>
>>> a = set()
>>> type(a)
<type 'set'>
>>> a.add('rocky')
>>> a
set(['rocky'])
复制代码
看到了吗?虽然字典和集合都用 { },可是直接用 a = { },获得的是字典而不是集合。在这里提一嘴,type() 函数是用来查看对象的类型的函数。
update 是将另外一个集合合并过来的方法。
>>> a = set([1,2,3])
>>> b = set(['a','b','c'])
>>> a.update(b)
>>> a
set(['a', 1, 2, 3, 'b', 'c'])
>>> b
set(['a', 'c', 'b'])
复制代码
2.pop & remove & clear
pop 每次删除一个,并返回删除的结果,由于集合没有顺序,因此是随机删除,而且 pop 没有参数。
>>> a = set([1,2,3])
>>> a.pop()
1
>>> a
set([2, 3])
>>> a.pop(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)
复制代码
remove 也是删除,它没有返回值,可是它能够删除指定元素,可是删除的必须是集合中的元素,不然会报错。
>>> a = set([1,2,3])
>>> a.remove(1)
>>> a
set([2, 3])
>>> a.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4
复制代码
clear 也是删除,但它是集合删除中惹不起的存在,由于它直接会把集合清空。
>>> a = set([1,2,3])
>>> a.clear()
>>> a
set([])
复制代码
集合的运算和咱们数学中在我看来是一个样的,分为元素和集合,集合和集合。
首先来讲元素和集合。元素和集合只有一种关系,那就是属于或者不属于某个集合。
>>> a = set([1,2,3])
>>> 1 in a
True
>>> '1' in a
False
复制代码
而后再来讲集合和集合。集合和集合比较常见的有 5 种关系,下面容我一一道来(假设咱们有两个集合 A 和 B)。
1.A 与 B 相等
>>> a = set([1,2,3])
>>> b = set([1,2,3])
>>> a == b
True
>>> b = set(['a','b','c'])
>>> a == b
False
复制代码
2.A 是 B 的子集
子集的意思就是 A 的元素在 B 里都有且 B 的元素个数比 A 多。能够用 A < B 或者 A.issubset(B) 判断,若是是 True 则表示 A 是 B 的子集。
>>> a = set([1,2,3])
>>> b = set([1,2,3,'a','b'])
>>> a < b
True
>>> a.issubset(b)
True
复制代码
3.A 和 B 的并集
并集的意思就是 A 和 B 中的全部元素,能够用 A | B 或者 A.union(B) 表示,吧并集的结果是生成一个新的对象,并非在这两个集合上的扩充。
>>> a = set([1,2,3])
>>> b = set([1,2,3,'a','b'])
>>> c = a | b
>>> c
set(['a', 1, 2, 3, 'b'])
>>> c = a.union(b)
>>> c
set(['a', 1, 2, 3, 'b'])
复制代码
4.A 和 B 的交集
交集的意思就是 A 和 B 中公有的元素。能够用 A & B 或者 A.intersection(B) 表示,交集的结果也是生成一个新的对象。
>>> a = set([1,2,3])
>>> b = set([1,2,3,'a','b'])
>>> c = a & b
>>> c
set([1, 2, 3])
>>> c = a.intersection(b)
>>> c
set([1, 2, 3])
复制代码
5.A 相对 B 的补集
补集也叫差集,意思就是只属于 A 的元素可是不属于 B 的元素,你能够理解成 A 集合中的元素去掉 A 与 B 的交集。能够用 A - B 或者 A.difference(B) 表示。
>>> a = set(['a','b','c',1,2,3])
>>> b = set(['a','b',1,4])
>>> a - b
set(['c', 3, 2])
>>> a.difference(b)
set(['c', 3, 2])
复制代码
还有一点我想说的是,用这些运算的时候最好用带名字的函数,由于使用运算符的话可读性不好。
到本篇为止,Python 中常见的对象类型我都写完了,算是完成了一个小目标,接下来的一个阶段的话开始写 Python 的语句方面,包括 if else,for 循环啦等等,由于在了解了基本的对象类型之后,就要学会如何去使用它们。
更多内容,欢迎关注公众号「Python空间」,期待和你的交流。