Python數據類型 - set 集合

set 集合


在Python中,set是基本數據類型的一種集合類型。

  • set 數組是一組key值,不包含重複元素。
  • set 數組是可變的、無序的、有限的集合,其元素是惟一的、不可變的。
  • set 數組沒有(不支持)索引和切片操做。

set有可變集合(set)和不可變集合(frozenset)兩種,其中

  • set:能夠原地修改,或者說是可變的,也能夠說是 unhashable(不可哈希)的。
  • frozenset:是一個被「凍結」的集合,不能原地修改,是 hashable(可哈希)的。

1、set的建立

(1)直接建立

方式:將全部項(元素)放在花括號「{}」內,以逗號「,」分隔。

集合元素:集合能夠有任意數量的元素,它們能夠是不一樣的類型(例如:數字、元組、字符串等)。可是,集合不能有可變元素(例如:列表、集合或字典)。

>>> a = {1,2,3,4,'a'}
>>> type(a)
<class 'set'>

(2)經過set()、frozenset()建立

python中,set類是在python的sets模塊中,不須要導入sets模塊能夠直接建立集合。

>>>set('boy')
set(['y', 'b', 'o'])

(3)建立空的set集合

建立空集合比較特殊。
在 Python 中,空花括號「{}」用於建立空字典。要建立一個沒有任何元素的集合,使用set()函數(不要包含任何參數)。python

>>> a = set()
>>> a
set()
>>> b = {}
>>> type(a),type(b)
(<class 'set'>, <class 'dict'>)

ps:建立set例子

clipboard.png


2、set操做

(1) in

in關鍵字,判斷某key是否在set中,並返回True or False。數組

>>> s = set([1,2,3,2,1,3,4,5])
>>> s
{1, 2, 3, 4, 5}

(2)add(key)

add()方法:添加元素到set中。能夠重複添加,but沒有效果,由於set中元素惟一性,會過濾重複的元素。函數

>>> s.add(6)
>>> s
{1, 2, 3, 4, 5, 6}

(3)update()

update():將參數添加到set中並返回一個set,自動過濾重複元素。
update()方法既能夠帶一個單參數,也能夠帶一個or多個set,就好像屢次調用add()。spa

clipboard.png

(4)remove(key)、discard(key)

remove(key)、discard(key)刪除指定元素。
區別:其中remove()刪除不存在的key時會返回報錯,而discard()不會。code

>>> a_set = {1,2,3,6,10,15,21,28,36,45}
>>> a_set
{1, 2, 3, 36, 6, 10, 45, 15, 21, 28}    # 並不必定是按填寫的順序
>>> a_set.discard(10)
>>> a_set
{1, 2, 3, 36, 6, 45, 15, 21, 28}
>>> a_set.remove(21)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 21

(5)pop()

pop()函數不須要帶任何參數,將set中的第一個元素刪除。索引

>>> a_set.pop()
1
>>> a_set
{2, 3, 36, 6, 45, 15, 28}

(6)clear()

clear()函數,清空set,集合仍存在,只不過爲空集合。ip

>>> a_set.clear()
>>> a_set
set()

(7)del 刪除一個元素

語法形式:del set_namerem


3、集合操做

set能夠當作數學意義上的無序、無重複元素的集合,所以,兩個set能夠作數學意義上的交集、並集等操做。字符串

  • 交集:兩個set集合之間全部的元素,操做符號爲「&」或者intersection()函數;
  • 並集:兩個set集合之間共有的元素,操做符號爲「|」或者union()函數;
  • 差集:在a集合中但不在b集合中,方法爲difference()函數;
  • symmetric_difference():在a集合中不在b集合中 and 在b集合中不在a集合中。
舉幾個例子:
>>> s1 =set([1,3,6])
>>> s & s1        # and
{1, 3, 6}
>>> s | s1         # or
{1, 2, 3, 5, 6}
>>> a_set = {1,2,3,4,5,6,7,8,9,0}
>>> b_set = {1,2,3,4,5,11,12,13,14,15}
>>> a_set.union(b_set)             # 並集|,或者直接a_set | b_set
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15}
>>> a_set.intersection(b_set)     # 交集&,或者直接使用 a_set & b_set
{1, 2, 3, 4, 5}
>>> a_set.difference(b_set)     # 差集,在a中但不在b中
{0, 6, 7, 8, 9}
>>> a_set.symmetric_difference(b_set) #在a中不在b中 and 在b中不在a中
{0, 6, 7, 8, 9, 11, 12, 13, 14, 15}
  • issubset():判斷集合是否爲某集合的子集,返回True or False。

  • issuperset():判斷集合是否爲某集合的父集,返回True or False。

clipboard.png


❤ thanks for watching, keep on updating...

相關文章
相關標籤/搜索