集合(set):把不同的元素組成一起形成集合,是python基本的資料型別。
集合元素(set elements):組成集合的成員
>>> li=['a','b','c','a']
>>> se =set(li)
>>> se
set(['a', 'c', 'b'])
集合物件是一組無序排列的可雜湊的值:集合成員可以做字典的鍵
>>> li=[['a','b','c'],['a','c']]
>>> se = set(li)
traceback (most recent call last):
file "", line 1, in
se = set(li)
typeerror: list objects are unhashable
集合分類:可變集合、不可變集合
可變集合(set):可新增和刪除元素,非可雜湊的,不能用作字典的鍵,也不能做其他集合的元素
不可變集合(frozenset):與上面恰恰相反
集合的相關操作
1、建立集合
由於集合沒有自己的語法格式,只能通過集合的工廠方法set()和frozenset()建立
>>> s = set('beginman')
>>> s
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])
>>> t = frozenset('pythonman')
>>> t
frozenset(['a', 'h', 'm', 'o', 'n', 'p', 't', 'y'])
>>> type(s),type(t)
('set'>, 'frozenset'>)
>>> len(s),len(t)
(7, 8)
>>> s==t
false
>>> s=t
>>> s==t
true
>>>
2、訪問集合
由於集合本身是無序的,所以不能為集合建立索引或切片操作,只能迴圈遍歷或使用in、not in來訪問或判斷集合元素。
>>>
'a'in s
true
>>>
'z'in s
false
>>>
for i in s:
print iah
monp
ty>>>
3、更新集合
可使用以下內建方法來更新:
s.add()
s.update()
s.remove()
注意只有可變集合才能更新:
>>> s.add(0)
traceback (most recent call last):
file "", line 1, in
s.add(0)
attributeerror: 'frozenset' object has no attribute 'add'
>>> type(s)
'frozenset'>
>>> se = set(s)
>>> se
set(['a', 'h', 'm', 'o', 'n', 'p', 't', 'y'])
>>> type(se)
'set'>
>>> se.add(0)
>>> se
set(['a', 0, 'h', 'm', 'o', 'n', 'p', 't', 'y'])
>>> se.update('mm')
>>> se
set(['a', 0, 'h', 'm', 'o', 'n', 'p', 'm', 't', 'y'])
>>> se.update('django')
>>> se
set(['a', 0, 'd', 'g', 'h', 'j', 'm', 'o', 'n', 'p', 'm', 't', 'y'])
>>> se.remove('d')
>>> se
set(['a', 0, 'g', 'h', 'j', 'm', 'o', 'n', 'p', 'm', 't', 'y'])
>>>
del:刪除集合本身四、集合型別操作符
1、in ,not in
2、集合等價與不等價(==, !=)
3、子集、超集(見上表)
>>> set('shop')
true
>>> set('bookshop')>=set('shop')
true
4、聯合(|)
聯合(union)操作與集合的or操作其實等價的,聯合符號有個等價的方法,union()。
>>> s1=set('begin')
>>> s2=set('man')
>>> s3=s1|s2
>>> s3
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])
>>> s1.union(s2)
set(['a', 'b', 'e', 'g', 'i', 'm', 'n'])
但+ 運算則不適合:
>>> s3new = s1+s2
traceback (most recent call last):
file "", line 1, in
s3new = s1+s2
typeerror: unsupported operand type(s) for +: 'set'
and'set'
``5、交集(&)
與集合and等價,交集符號的等價方法是intersection()
s1&s2set([『n』])
s1.intersection(s2)
set([『n』])
6、查補(-)
等價方法是difference()
>>> s1-s2
set(['i', 'b', 'e', 'g'])
>>> s1.difference(s2)
set(['i', 'b', 'e', 'g'])
7、對稱差分(^)
對稱差分是集合的xor(『異或』),取得的元素屬於s1,s2但不同時屬於s1和s2.其等價方法symmetric_difference()
s1^s2set([『a』, 『b』, 『e』, 『g』, 『i』, 『m』])
s1.symmetric_difference(s2)
set([『a』, 『b』, 『e』, 『g』, 『i』, 『m』])
注意:集合之間and,or
s1 and s2
set([『a』, 『m』, 『n』]) #取 s2
s1 or s2
set([『i』, 『b』, 『e』, 『g』, 『n』]) #取 s1
五、集合、列表、元組、字串之間轉換
list(s1)[『i』, 『b』, 『e』, 『g』, 『n』]
str(s1)
「set([『i』, 『b』, 『e』, 『g』, 『n』])」
tuple(s1)
(『i』, 『b』, 『e』, 『g』, 『n』)
應用:
**'''最簡單的去重方式'''**
lis = [1,2,3,4,1,2,3,4]
print list(set(lis)) #[1, 2, 3, 4]
「`六、關於集合的內建函式、內建方法
1、len():返回集合元素個數
2、set()、frozenset()工廠函式
3、所有集合方法:
4、僅適合可變集合
集合的簡單介紹
集合是無序可變,元素不能重複。實際上,集合底層是字典實現,集合的所有元素都是字典 中的 鍵物件 因此是不能重複的且唯一的。集合建立和刪除 使用 建立集合物件,並使用 add 方法新增元素 a a a.add 9 a 使用 set 將列表 元組等可迭代物件轉成集合。如果原來資料存在重複資料,則只保 留...
集合的簡單介紹
集合是jdk提供的乙個體系的介面和類的框架,是用來儲存多個元素的容器 集合的本質就是用來儲存資料的 用來同時儲存多個不同引用資料型別物件的容器解決了陣列存放單一資料型別資料的弊端。同時集合大小是根據存放資料數量進行自我維護的,直白一點的說集合大小是可變,解決了陣列長度固定的弊端 1 只能存放引用資料...
Python簡單介紹
python,是一種物件導向的解釋型計算機程式語言,有荷蘭人guido van rossum於1989年發明,第乙個公開發行版發行於1991年。python是純粹的自由軟體,源 和直譯器cpython遵循gpl協議。python語法簡潔清晰,特色之一是強制用空白符作為語句縮排。python具有豐富和...