鍍金池/ 教程/ Python/ 集合
基礎(chǔ)
itertools
HTTP 服務(wù)
hashlib
閉包
文件和目錄
單元測試
使用 @property
標(biāo)準(zhǔn)模塊
陌生的 metaclass
Base64
進(jìn)程、線程和協(xié)程
讀寫二進(jìn)制文件
匿名函數(shù)
輸入和輸出
Click
元組
字符編碼
partial 函數(shù)
參考資料
collections
協(xié)程
類和實(shí)例
Python 之旅
定制類和魔法方法
常用數(shù)據(jù)類型
繼承和多態(tài)
ThreadLocal
HTTP 協(xié)議簡介
Requests 庫的使用
讀寫文本文件
列表
os 模塊
迭代器 (Iterator)
正則表達(dá)式
集合
上下文管理器
異常處理
你不知道的 super
定義函數(shù)
datetime
資源推薦
字典
slots 魔法
hmac
第三方模塊
進(jìn)程
類方法和靜態(tài)方法
函數(shù)參數(shù)
高階函數(shù)
函數(shù)
re 模塊
高級(jí)特性
線程
argparse
生成器
結(jié)束語
字符串
map/reduce/filter
函數(shù)式編程
Celery
裝飾器

集合

集合(set)和字典(dict)類似,它是一組 key 的集合,但不存儲(chǔ) value。集合的特性就是:key 不能重復(fù)。

集合常用操作

創(chuàng)建集合

set 的創(chuàng)建可以使用 {} 也可以使用 set 函數(shù):

>>> s1 = {'a', 'b', 'c', 'a', 'd', 'b'}   # 使用 {}
>>> s1
set(['a', 'c', 'b', 'd'])
>>>
>>> s2 = set('helloworld')                # 使用 set(),接收一個(gè)字符串
>>> s2
set(['e', 'd', 'h', 'l', 'o', 'r', 'w'])
>>>
>>> s3 = set(['.mp3', '.mp4', '.rmvb', '.mkv', '.mp3'])   # 使用 set(),接收一個(gè)列表
>>> s3
set(['.mp3', '.mkv', '.rmvb', '.mp4'])

遍歷集合

>>> s = {'a', 'b', 'c', 'a', 'd', 'b'}
>>> for e in s:
...     print e
...
a
c
b
d

添加元素

add() 方法可以將元素添加到 set 中,可以重復(fù)添加,但沒有效果。

>>> s = {'a', 'b', 'c', 'a', 'd', 'b'}
>>> s
set(['a', 'c', 'b', 'd'])
>>> s.add('e')
>>> s
set(['a', 'c', 'b', 'e', 'd'])
>>> s.add('a')
>>> s
set(['a', 'c', 'b', 'e', 'd'])
>>> s.add(4)
>>> s
set(['a', 'c', 'b', 4, 'd', 'e'])

刪除元素

remove() 方法可以刪除集合中的元素。

看看例子:

>>> s = {'a', 'b', 'c', 'a', 'd', 'b'}
>>> s
set(['a', 'c', 'b', 'd'])
>>> s.remove('a')           # 刪除元素 'a'
>>> s
set(['c', 'b', 'd'])
>>> s.remove('e')           # 刪除不存在的元素,會(huì)拋出 KeyErro
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'e'

交集/并集/差集

Python 中的集合也可以看成是數(shù)學(xué)意義上的無序和無重復(fù)元素的集合,因此,我們可以對兩個(gè)集合作交集、并集等。

看看例子:

>>> s1 = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 6, 9, 10, 12}
>>> s3 = {2, 3, 4}
>>> s1 & s2            # 交集
set([3, 6])
>>> s1 | s2            # 并集
set([1, 2, 3, 4, 5, 6, 9, 10, 12])
>>> s1 - s2            # 差集
set([1, 2, 4, 5])
>>> s3.issubset(s1)    # s3 是否是 s1 的子集
True
>>> s3.issubset(s2)    # s3 是否是 s2 的子集
False
>>> s1.issuperset(s3)  # s1 是否是 s3 的超集
True
>>> s1.issuperset(s2)  # s1 是否是 s2 的超集
False

參考資料

上一篇:partial 函數(shù)下一篇:datetime