集合與映射類型 集合類型(Set Type) 集合類型對象是由具有唯一性的可哈希對象所組成的無序多項集。 由於集合類型是無序的,它並不記錄元素位置或插入順序,因此集合類型不支持索引、切片或其他序列類的操作。 類型 對應關鍵字 構造函數 是否可變 是否可哈希 set set set() 可變 不可哈希 ...
集合與映射類型
集合類型(Set Type)
集合類型對象是由具有唯一性的可哈希對象所組成的無序多項集。
由於集合類型是無序的,它並不記錄元素位置或插入順序,因此集合類型不支持索引、切片或其他序列類的操作。
類型 | 對應關鍵字 | 構造函數 | 是否可變 | 是否可哈希 |
---|---|---|---|---|
set | set | set() |
可變 | 不可哈希 |
frozenset | frozenset | frozenset() |
不可變 | 可哈希 |
set
和 frozenset
的構建方式:
- 使用花括弧內以逗號分隔元素的方式:
{'jack', 'sjoerd'}
- 使用集合推導式:
{c for c in 'abracadabra' if c not in 'abc'}
- 使用類型構造器:
set()
,set('foobar')
,set(['a', 'b', 'foo'])
frozenset
可通過構造函數 frozenset()
來創建:
class set([iterable])
class frozenset([iterable])
上述倆種構建器輸入一個可迭代對象( iterable )返回一個新的 set
或 frozenset
對象。 如果未指定可迭代對象,則將返回一個新的空集合。
由於集合的元素必須為可哈希的,因此元素為集合的集合,其所有的內層集合必須為 frozenset
對象。
集合類型通用操作 (可用於 set
和 frozenset
)
下表中 s 代表多項集(collection),x 是任何滿足 s 所規定的類型和值限制的任意對象,set代表集合,other代表另一集合。
( union()
、 intersection()
、 difference()
、symmetric_difference()
、issubset()
和 issuperset()
方法可以接受任何可迭代對象作為參數, 而基於運算符的對應方法則要求參數為集合對象。)
(混合了 set
實例與 frozenset
的二進位位運算將返回與第一個操作數相同的類型。例如: frozenset('ab') | set('bc')
將返回 frozenset
的實例。)
操作 | 操作說明 |
---|---|
len(s) |
返回集合 s 中的元素數量(即 s 的基數)。 |
x in s |
檢測 x 是否為 s 中的成員。 |
x not in s |
檢測 x 是否非 s 中的成員。 |
isdisjoint(other) |
如果集合中沒有與 other 共有的元素則返回 True 。 當且僅當兩個集合的交集為空集合時,兩者為不相交集合。 |
set <= other ,issubset(other) |
檢測是否集合中的每個元素都在 other 之中。 |
set < other |
檢測集合是否為 other 的真子集,即 set <= other and set != other 。 |
set >= other ,issuperset(other) |
檢測是否 other 中的每個元素都在集合之中。 |
set > other |
檢測集合是否為 other 的真超集,即 set >= other and set != other 。 |
set | other | ... ,union(others) |
返回一個新集合,其中包含來自原集合以及 others 指定的所有集合中的元素。 |
set & other & ... ,intersection(others) |
返回一個新集合,其中包含原集合以及 others 指定的所有集合中共有的元素。 |
set - other - ... ,difference(others) |
返回一個新集合,其中包含原集合中在 others 指定的其他集合中不存在的元素。 |
set ^ other ,symmetric_difference(others) |
返回一個新集合,其中的元素或屬於原集合或屬於 other 指定的其他集合,但不能同時屬於兩者。 |
copy() |
返回原集合的淺拷貝。 |
可用於 set
但不可用於 frozenset
的操作
下表中 set代表集合,other代表另一集合。elem代表滿足set所有要求的元素。
操作 | 操作說明 |
---|---|
set |= other | ... ,update(others) |
更新集合,添加來自 others 中的所有元素。 |
set &= other & ... ,intersection_update(others) |
更新集合,只保留其中在所有 others 中也存在的元素。 |
set -= other | ... ,difference_update(others) |
更新集合,移除其中也存在於 others 中的元素。 |
set ^= other ,symmetric_difference_update(others) |
更新集合,只保留存在於集合的一方而非共同存在的元素。 |
add(elem) |
將元素 elem 添加到集合中。 |
remove(elem) |
從集合中移除元素 elem。 如果 elem 不存在於集合中則會引發KeyError 。 |
discard(elem) |
如果元素 elem 存在於集合中則將其移除。 |
pop() |
從集合中移除並返回任意一個元素。 如果集合為空則會引發KeyError 。 |
clear() |
從集合中移除所有元素。 |
映射類型 - 字典(dict)
映射(mapping)類型對象會將可哈希值映射到任意對象。 映射屬於可變對象。字典是內置的映射類型。
字典由鍵值對構成。字典的鍵(key)可以是任何可哈希值,而值可以是任意對象。
字典的構造方式:
- 使用花括弧內以逗號分隔
鍵: 值
對的方式:{'jack': 4098, 'sjoerd': 4127}
or{4098: 'jack', 4127: 'sjoerd'}
- 使用字典推導式:
{}
,{x: x ** 2 for x in range(10)}
- 使用類型構造器:
dict()
,dict([('foo', 100), ('bar', 200)])
,dict(foo=100, bar=200)
構造過程中:
- 如果沒有給出位置參數,將創建一個空字典。
- 如果給出一個位置參數並且其屬於映射對象,將創建一個具有與映射對象相同鍵值對的字典。
- 否則的話,位置參數必須為一個 iterable對象。 該可迭代對象中的每一項本身必須為一個剛好包含兩個元素的可迭代對象。 每一項中的第一個對象將成為新字典的一個鍵,第二個對象將成為其對應的值。
- 如果一個鍵出現一次以上,該鍵的最後一個值將成為其在新字典中對應的值。
- 如果給出了關鍵字參數,則關鍵字參數及其值會被加入到基於位置參數創建的字典。
- 如果要加入的鍵已存在,來自關鍵字參數的值將替代來自位置參數的值。
可用於字典(dict)的操作
d
代表一個字典
操作 | 操作說明 |
---|---|
list(d) |
返回字典 d 中使用的所有鍵的列表。 |
len(d) |
返回字典 d 中的項數。 |
d[key] |
返回 d 中以 key 為鍵的項。 如果映射中不存在 key 則會引發 KeyError 。 |
d[key] = value |
將 d[key] 設為 value。 |
del d[key] |
將 d[key] 從 d 中移除。 如果映射中不存在 key 則會引發 KeyError 。 |
key in d |
如果 d 中存在鍵 key 則返回 True ,否則返回 False 。 |
key not in d |
等價於 not key in d 。 |
iter(d) |
返回以字典的鍵為元素的迭代器。 這是 iter(d.keys()) 的快捷方式。 |
clear() |
移除字典中的所有元素。 |
copy() |
返回原字典的淺拷貝。 |
d | other |
合併 d 和 other 中的鍵和值來創建一個新的字典,兩者必須都是字典。當 d 和 other 有相同鍵時, other 的值優先。 |
d |= other |
用 other 的鍵和值更新字典 d ,other 可以是 mapping 或 iterable 的鍵值對。當 d 和 other 有相同鍵時, other 的值優先。 |
ref:
Python 文檔:集合類型 set 與 frozenset
Python 文檔:映射類型 dict