集合是由序列构建的,它们主要用于检查成员资格。
集合分类:可变集合、不可变集合。
可变集合(set):可以添加删除元素,非可哈希的、不能作字典的键,也不能做其他集合的元素。
不可变集合(frozenset):与上面恰恰相反。
1. 创建集合
-
In [1]: l1 = ['a','b','c']
-
In [2]: se = set(l1)
-
In [3]: se
-
Out[3]: set(['a', 'c', 'b'])
-
In [8]: t = frozenset('python')
-
In [9]: print t
-
frozenset(['h', 'o', 'n', 'p', 't', 'y'])
2. 访问集合
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in/not in 来访问或判断集合元素
-
In [10]: t = set('python')
-
In [11]: 'p' in t
-
Out[11]: True
-
In [12]: 'a' in t
-
Out[12]: False
3. 更新集合
可使用内建方法来更新:s.add() s.update() s.remove()
注意:只有可变集合(set)才能更新
-
In [13]: s = set('abc')
-
In [14]: p = frozenset('python')
-
In [15]: p.add(0)
-
---------------------------------------------------------------------------
-
AttributeError Traceback (most recent call last)
-
<ipython-input-15-c9e7b5808c50> in <module>()
-
----> 1 p.add(0)
-
AttributeError: 'frozenset' object has no attribute 'add'
-
In [16]: s.add(0)
-
In [17]: s
-
Out[17]: set(['a', 0, 'c', 'b'])
-
In [18]: s.update('MM') # 修改可变集合
-
In [19]: s
-
Out[19]: set(['a', 0, 'c', 'b', 'M'])
-
In [20]: s.remove(0) # 删除元素
-
In [21]: s
-
Out[21]: set(['a', 'c', 'b', 'M'])
4. 集合类型操作符
(1)in, not in
(2)集合等价与不等价 ( ==, !=)
(3)子集和超集
-
In [22]: set('abc') < set('abcd')
-
Out[22]: True
-
-
In [23]: set('xyz') > set('x')
-
Out[23]: True
(4)联合(|)
-
In [24]: a = set('book')
-
-
In [25]: b = set('ship')
-
-
In [26]: a|b
-
Out[26]: set(['p', 's', 'b', 'i', 'h', 'k', 'o'])
(5)交集(&)
-
In [27]: a = set('abc')
-
-
In [28]: b = set('cde')
-
-
In [29]: a & b
-
Out[29]: set(['c'])
(6)差补(-)
-
In [41]: a = set('123')
-
-
In [42]: b = set('345')
-
-
In [43]: a - b
-
Out[43]: set(['1', '2'])
-
-
In [44]: b - a
-
Out[44]: set(['5', '4'])
(7)对称差分(^)
-
In [45]: a = set('123')
-
-
In [46]: b = set('345')
-
-
In [47]: a ^ b
-
Out[47]: set(['1', '2', '5', '4'])
-
-
In [48]: b ^ a
-
Out[48]: set(['1', '2', '5', '4'])
(8)集合之间 and 和 or
-
In [49]: a
-
Out[49]: set(['1', '3', '2'])
-
-
In [50]: b
-
Out[50]: set(['3', '5', '4'])
-
-
In [51]: a and b
-
Out[51]: set(['3', '5', '4']) # a and b 取 b
-
-
In [52]: a or b
-
Out[52]: set(['1', '3', '2']) # a or b 取 a
应用:
最简单取重方式:
-
In [53]: l1 = [1,2,3,4,1,2,3]
-
-
In [54]: print l1
-
[1, 2, 3, 4, 1, 2, 3]
-
-
In [55]: print list(set(l1))
-
[1, 2, 3, 4]
阅读(1410) | 评论(0) | 转发(0) |