python的set和其他語言類似, 是一個無序不重複元素集, 基本功能包括關系測試和消除重複元素。 集合對象還支援union(聯合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數學運算。
sets 支援 x in set的bool運算判别x是否在集合内, len(set)集合的長度,和 for x in set對集合内資料的操作。作為一個無序的集合,sets不記錄元素位置或者插入點。是以,sets**不支援 indexing, slicing**, 或其它類序列(sequence-like)的操作。
集合用于包含一組無序的對象。要建立集合,可使用set()函數并像下面這樣提供一系列的項:
In []: s = set([,,,]) #建立一個數值集合
In []: t = set("Hello") #建立一個唯一字元的集合
與清單和元組不同,集合是無序的,也無法通過數字進行索引。此外,集合中的元素不能重複。例如,如果檢查前面代碼中t集合的值,結果會是:
In []: t
Out[]: {'H', 'e', 'l', 'o'}
集合支援一系列标準操作,包括并集、交集、差集和對稱差集,例如:
- a = t | s # t 和 s的并集
- b = t & s # t 和 s的交集
- c = t – s # 求差集(項在t中,但不在s中)
- d = t ^ s #對稱差集(項在t或s中,但不會同時出現在二者中)
基本操作:
1、添加新的元素,.add()用于添加單個元素、.update()用于批量添加元素,如果喂給add的是‘avda’這種多字元串可以成為一個元素,但是喂給update會對字元串去重操作
In []: t.add('x')
In []: t
Out[]: {'H', 'e', 'l', 'o', 'x'}
In []: t.update('aa','bbb')
In []: t
Out[]: {'H', 'a', 'b', 'e', 'l', 'o', 'x'}
In []: t.add('ccc')
In []: t
Out[]: {'H', 'a', 'b', 'ccc', 'e', 'l', 'o', 'x'}
2、使用remove()可以删除一項,隻能一個一個删掉
In [12]: t.remove('H')
In []: t
Out[]: {'a', 'b', 'ccc', 'e', 'l', 'o', 'x'}
3、集合長度
In [15]: len(t)
Out[15]: 7
4、bool判斷
#x in s 測試 x 是否是 s 的成員
In []: 'a' in t
Out[]: True
#x not in s 測試 x 是否不是 s 的成員
In []: 'k' not in t
Out[]: True
#s.issubset(t),s <= t 測試是否s中的每一個元素都在t中
In []: s.issubset(t)
Out[]: False
#s.issuperset(t),s >= t測試是否t中的每一個元素都在s中
In []: s.issuperset(t)
Out[]: False
5、交集(&)、(intersection)項同時在t與s中
In []: s&t
Out[]: set()
In []: s.intersection(t)
Out[]: set()
6、并集(|)、(union),項在t中或者在s中
In []: s|t
Out[]: {'a', , , 'ccc', 'e', , , 'l', 'o', 'x', 'b'}
In []: s.union(t)
Out[]: {'a', , , 'ccc', 'e', , , 'l', 'o', 'x', 'b'}
7、差集(-)、(difference),項在s中,但不在t中
In [24]: s-t
Out[24]: {3, 5, 9, 10}
In [25]: s.difference(t)
Out[25]: {3, 5, 9, 10}
8、對稱差集(^)、(sysmmetric_difference),項在t或s中,但不會同時出現在二者中
In []: s^t
Out[]: {'a', , , , , 'o', 'x', 'ccc', 'e', 'l', 'b'}
In []: s.symmetric_difference(t)
Out[]: {'a', , , , , 'o', 'x', 'ccc', 'e', 'l', 'b'}
請注意:union(), intersection(), difference() 和 symmetric_difference() 的非運算符(non-operator,就是形如 s.union()這樣的)版本将會接受任何 iterable 作為參數。相反,它們的運算符版本(operator based counterparts)要求參數必須是 sets,如果都是set會報錯。
In [29]: set('abc') & 'cbs'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input--caf> in <module>()
----> set('abc') & 'cbs'
TypeError: unsupported operand type(s) for &: 'set' and 'str'
#如果是非運算符,則可以;
In []: set('abc').intersection('cbs')
Out[]: {'b', 'c'}