一、集合

   set,集合,是唯一的、不可变的对象的一个无序集合。集合只能包含不可变的对象类型,因此,列表和字典不能嵌入集合;如果需要存储复合值,可以嵌入元组;如果需要嵌入集合本身,需要调用frozenset,由frozenset创建的集合不可变,且不可修改,但可以嵌套到其他集合中。

   1、集合的基础知识(python2.7)

1、定义空集合
In [2]: s1 = set()

2、创建集合
In [3]: s2 = {11,22,'dd'}
In [4]: print s2
set(['dd', 11, 22])

3、通过序列或其他可迭代的对象创建集合
In [5]: s3 = set('abcde')
In [6]: print s3
set(['a', 'c', 'b', 'e', 'd'])

In [9]: s4 = set({'a':1,'b':'gg'})
In [10]: print s4
set(['a', 'b'])

In [11]: s5 = set([1,2,'ace','hj'])
In [12]: print s5
set(['hj', 1, 2, 'ace'])

4、通过序列或可迭代对象创建的集合可进行的数学操作
In [13]: 'a' in s3
Out[13]: True

In [14]: s3 -s4
Out[14]: {'c', 'd', 'e'}

In [15]: s3 | s4
Out[15]: {'a', 'b', 'c', 'd', 'e'}

In [16]: s3 & s4
Out[16]: {'a', 'b'}

In [17]: s3 ^ s4
Out[17]: {'c', 'd', 'e'}

In [18]: s3 > s4
Out[18]: True
In [19]: s3 < s4
Out[19]: False

  

   2、集合的方法

1、添加元素:集合中无则添加,有则不进行操作
In [21]: s3.add('new')
In [22]: print s3
set(['a', 'c', 'b', 'e', 'd', 'new'])

2、清除集合中所有元素
In [24]: s2
Out[24]: {11, 22, 'dd'}
In [25]: s2.clear()
In [26]: s2
Out[26]: set()

3、浅拷贝
In [28]: s3
Out[28]: {'a', 'b', 'c', 'd', 'e', 'new'}
In [29]: s5 = s3.copy()
In [30]: s5
Out[30]: {'a', 'b', 'c', 'd', 'e', 'new'}

4、两个集合的差集;
In [31]: s3
Out[31]: {'a', 'b', 'c', 'd', 'e', 'new'}
In [32]: s4
Out[32]: {'a', 'b'}

s3中存在而s4中不存在,差集
In [33]: s3.difference(s4)
Out[33]: {'c', 'd', 'e', 'new'}

s3中不存在的和s4中不存在的都取出,对称差集
In [34]: s3.symmetric_difference(s4)
Out[34]: {'c', 'd', 'e', 'new'}

先比较差集,之后将比较的结果重新赋值给s3
In [35]: s3.difference_update(s4)
In [36]: s3
Out[36]: {'c', 'd', 'e', 'new'}

先比较对称差集,之后将比较的结果重新复制给s3
In [42]: s3.symmetric_difference_update(s4)
In [43]: s3
Out[43]: {'c', 'd', 'e', 'new'}

5、移除指定元素,不存在不报错
In [43]: s3
Out[43]: {'c', 'd', 'e', 'new'}
In [44]: s3.discard('new')
In [45]: s3
Out[45]: {'c', 'd', 'e'}
In [46]: s3.discard(111)

6、移除指定元素,不存在会报错
In [47]: s3.remove(111)
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-47-179a5da03057> in <module>()
----> 1 s3.remove(111)

KeyError: 111

7、随机移除集合中元素,集合为空时会报错
In [48]: s3
Out[48]: {'c', 'd', 'e'}
In [49]: s3.pop()
Out[49]: 'c'
In [50]: s3
Out[50]: {'d', 'e'}

8、两个集合取交集
In [57]: s4
Out[57]: {'a', 'b'}
In [58]: s3
Out[58]: {'a', 'c', 'd', 'e'}
In [59]: s3.intersection(s4)
Out[59]: {'a'}
将取出的交集重新赋值给s3
In [60]: s3.intersection_update(s4)
In [61]: s3
Out[61]: {'a'}

9、判断两个集合有无交集
In [65]: s3.isdisjoint(s4)
Out[65]: False

10、并集
In [67]: s3.union(s4)
Out[67]: {'a', 'b', 'c', 'd', 'e'}

11、将可迭代的对象加入集合
列表
In [68]: l1 = [1,2,3,4]
In [69]: s3.update(l1)
In [70]: s3
Out[70]: {1, 2, 3, 4, 'a', 'b', 'c', 'd', 'e'}
字符串
In [71]: s3.update('jonny')
In [72]: s3
Out[72]: {1, 2, 3, 4, 'a', 'b', 'c', 'd', 'e', 'j', 'n', 'o', 'y'}
元组
In [74]: s3.update(t1)
In [75]: s3
Out[75]: {1, 2, 3, 4, 12, 13, 14, 'a', 'b', 'c', 'd', 'e', 'j', 'n', 'o', 'y'}

   

   3、集合解析(python3.x新特性)

>>> {i ** 2 for i in [1,2,3,4]}
{16, 1, 4, 9}