日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python中frozenset( )和set()的用法区别

發布時間:2024/9/20 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中frozenset( )和set()的用法区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Python frozenset() 函數

frozenset() 返回一個凍結的集合,凍結后集合不能再添加或刪除任何元素。

frozenset() 函數語法:

class frozenset([iterable])
iterable – 可迭代的對象,比如列表、字典、元組等等
返回新的 frozenset 對象,如果不提供任何參數,默認會生成空集合。

示例:

>>> a = frozenset(range(10)) # 生成一個新的不可變集合 >>> a frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b = frozenset('runoob') >>> b frozenset(['b', 'r', 'u', 'o', 'n'])

2. set(可變集合)與frozenset(不可變集合)的區別

  • set無序排序且不重復,是可變的,有add(),remove()等方法。既然是可變的,所以它不存在哈希值。基本功能包括關系測試和消除重復元素. 集合對象還支持union(聯合), intersection(交集),difference(差集)和sysmmetric difference(對稱差集)等數學運算。不支持索引、切片等序列操作,但仍支持成員關系運算符in-not in、推導式等操作。

  • frozenset是凍結的集合,它是不可變的,存在哈希值,好處是它可以作為字典的key,也可以作為其它集合的元素。缺點是一旦創建便不能更改,沒有add,remove方法。

2.1 集合創建的區別:

set()和 frozenset()分別用來生成可變和不可變的集合。如果不提供任何參數,默認會生成空集合。如果提供一個參數,則該參數必須是可迭代的,即,一個序列,或迭代器,或支持迭代的一個對象。如:set()函數只能接受迭代器(String、Tuple、List、Dict、set)作為參數。

  • set()創建集合
>>> s = set([1,2,3]) >>> s set([1, 2, 3]) >>> type(s) <type 'set'> >>> s2 = set('jmilk') >>> s2 set(['i', 'k', 'j', 'm', 'l']) >>>
  • frozenset()創建集合
>>> t=frozenset('bookshop') >>> t frozenset(['b', 'h', 'k', 'o', 'p', 's']) >>>

2.2 更新可變集合的區別:

set()用各種集合內建的方法和操作符添加和刪除集合的成員,只有可變集合能被修改。而對于frozenset()函數試圖修改不可變集合會引發異常。
- set()

>>> s=set('cheeseshop') >>> s set(['c', 'e', 'h', 'o', 'p', 's']) >>> s.add('z') #添加 >>> s set(['c', 'e', 'h', 'o', 'p', 's', 'z']) >>> s.update() >>> s set(['c', 'e', 'h', 'o', 'p', 's', 'z']) >>> s.update('pypi') #添加 >>> s set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y', 'z']) >>> s.remove('z') #刪除 >>> s set(['c', 'e', 'i', 'h', 'o', 'p', 's', 'y']) >>> s =s-set('pypi')#刪除 >>> s set(['h', 'c', 'e', 's', 'o']) >>> del s #刪除集合 >>> s Traceback (most recent call last):File "<stdin>", line 1, in <module> NameError: name 's' is not defined >>>
  • frozenset()
>>> t=frozenset('bookshop') >>> t frozenset(['b', 'h', 'k', 'o', 'p', 's']) >>> t.add('z') Traceback (most recent call last):File "<stdin>", line 1, in <module> AttributeError: 'frozenset' object has no attribute 'add' >>>

2.3 成員關系 (in, not in)的區別:

set()和 frozenset()在這點上用法相同

  • set()
>>> s=set('cheeseshop') >>> s set(['c', 'e', 'h', 'o', 'p', 's']) >>> 'k' in s False >>> 'h' in s True
  • frozenset()
>>> t frozenset(['b', 'h', 'k', 'o', 'p', 's']) >>> 'k' in t True >>> 'c' in t False

2.4 集合等價/不等價的區別:

>>> s=set('cheeseshop') >>> s set(['c', 'e', 'h', 'o', 'p', 's']) >>> t=frozenset('cheeseshop') >>> t frozenset(['c', 'e', 'h', 'o', 'p', 's']) >>> s == t True >>> set('posh') == set('shop') True >>>

2.5 子集/超集的區別:

>>> set('posh') == set('shop') True >>> set('shop') < set('cheeseshop') True >>> frozenset('shop') < set('cheeseshop') True >>> set('bookshop') >= set('shop') True >>> frozenset('bookshop') >= set('shop') True >>>

2.6 遍歷訪問集合中的值的無別:

這里可變集合set()和非可變集合frozenset()都支持

>>> s=set('cheeseshop') >>> for i in s: ... print i ... c e h o p s >>> t=frozenset('bookshop') >>> t frozenset(['b', 'h', 'k', 'o', 'p', 's']) >>> for i in t: ... print i ... b h k o p s >>>

2.7 集合類型操作符的區別:

這里set()和frozenset()相同

  • 聯合( | )
>>> s set(['c', 'e', 'h', 'o', 'p', 's']) >>> t frozenset(['b', 'h', 'k', 'o', 'p', 's']) >>> t_1=set('bhm') >>> s_1=frozenset('cer') >>> t_1 set(['h', 'b', 'm']) >>> s_1 frozenset(['c', 'r', 'e']) >>> s|s_1 set(['p', 'c', 'r', 'e', 'h', 's', 'o']) >>> t|t_1 frozenset(['p', 's', 'b', 'h', 'k', 'm', 'o']) >>> s |t set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's']) >>>
  • 交集(&)
>>> s set(['c', 'e', 'h', 'o', 'p', 's']) >>> t frozenset(['b', 'h', 'k', 'o', 'p', 's']) >>> s&t set(['h', 's', 'o', 'p']) >>>
  • 差補/相對補集( – )
>>> s set(['c', 'e', 'h', 'o', 'p', 's']) >>> t frozenset(['b', 'h', 'k', 'o', 'p', 's']) >>> s-t set(['c', 'e']) # 該集合中的元素,只屬于集合 s,而不屬于集合 t >>>
  • 對稱差分( ^ )
    對稱差分是集合的 XOR(又稱”異或 “)。得到的集合只能是屬于集合 s 或者集合 t的成員,不能同時屬于兩個集合。
>>> s set(['c', 'e', 'h', 'o', 'p', 's']) >>> t frozenset(['b', 'h', 'k', 'o', 'p', 's']) >>> s^t set(['b', 'e', 'k', 'c']) >>>
  • 混合集合類型操作
    上面的示例中,左邊的 s 是可變集合,而右邊的 t 是一個不可變集合. 注意上面使用集合操作運算符所產生的仍然是可變集合,但是如果左右操作數的順序反過來,結果就不一樣了。

如果左右兩個操作數的類型相同, 既都是可變集合或不可變集合, 則所產生的結果類型是相同的,但如果左右兩個操作數的類型不相同(左操作數是 set,右操作數是 frozenset,或相反情況),則所產生的結果類型與左操作數的類型相同

>>> t frozenset(['b', 'h', 'k', 'o', 'p', 's']) >>> s set(['c', 'e', 'h', 'o', 'p', 's']) >>> t|s frozenset(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's']) >>> s|t set(['c', 'b', 'e', 'h', 'k', 'o', 'p', 's']) >>> t-s frozenset(['k', 'b']) >>> t^s frozenset(['c', 'b', 'e', 'k']) >>>

2.8 可變集合set()的方法

s.update(t):用 t 中的元素修改 s, 即s 現在包含 s 或 t 的成員
s.intersection_update(t): s 中的成員是共同屬于 s 和 t 的元素。
s.difference_update(t): s 中的成員是屬于 s 但不包含在 t 中的元素
s.symmetric_difference_update(t) :s 中的成員更新為那些包含在 s 或 t 中,但不是s和t 共有的元素
s.add(obj):在集合 s 中添加對象 obj
s.remove(obj):從集合 s 中刪除對象 obj,如果 obj 不是集合 s 中的元素(obj not in s),將引發 KeyError 錯誤。
s.discard(obj):如果 obj 是集合 s 中的元素,從集合 s 中刪除對象 obj
s.pop() :刪除集合 s 中的任意一個對象,并返回它
s.clear() :刪除集合 s 中的所有元素

2.9 集合類型操作符、函數和方法

  • set()和frozenset()都適用

len(s) :集合基數: 集合 s 中元素的個數
set([obj]) :可變集合工廠函數; obj 必須是支持迭代的,由 obj 中的元素創建集合,否則創建一個空集合
frozenset([obj]):不可變集合工廠函數; 執行方式和 set()方法相同,但它返回的是不可變集合
obj in s 成員測試:obj 是 s 中的一個元素嗎?
obj not in s 非成員測試:obj 不是 s 中的一個元素嗎?
s == t 等價測試: 測試 s 和 t 是否具有相同的元素?
s != t 不等價測試: 與==相反
s < t (嚴格意義上)子集測試: s != t 而且 s 中 所 有 的元素都是 t 的成員
s.issubset(t) s <= t 子集測試(允許不嚴格意義上的子集): s 中所有的元素都是 t 的成員
s > t (嚴格意義上)超集測試: s != t 而且 t 中所有的元素都是 s 的成員
s.issuperset(t) s >= t 超集測試(允許不嚴格意義上的超集): t 中所有的元素 都是 s 的成員
s.union(t) s | t 合并操作: s 或 t 中的元素
s.intersec- tion(t) s & t 交集操作: s 和 t 中的元素
s.difference(t) s - t 差分操作: s 中的元素,而不是 t 中的元素
s.symmetric_difference(t)s ^ t 對稱差分操作:s 或 t 中的元素,但不是 s 和 t 共有的元素
s.copy() 復制操作:返回 s 的(淺復制)副本

  • 適用于set()集合

s.update(t) s |= t (Union) 修改操作: 將 t 中的成員添加 s。
s.intersection_update(t) s &= t 交集修改操作: s 中僅包括 s 和 t 中共有的成員。
s.difference_update(t) s -= t 差修改操作: s 中包括僅屬于 s 但不屬于 t 的成員。
s.symmetric_difference_update(t) s ^= t 對稱差分修改操作: s 中包括僅屬于 s 或僅屬于 t 的成員。
s.add(obj) 加操作: 將 obj 添加到 s。
s.remove(obj) 刪除操作: 將 obj 從 s 中刪除;如果 s 中不存在obj,將引發 KeyError。
s.discard(obj) 丟棄操作: remove() 的 友 好 版 本 - 如果 s 中存在 obj,從 s 中刪除它。
s.pop() Pop 操作: 移除并返回 s 中的任意一個元素。
s.clear() 清除操作: 移除 s 中的所有元素。

參考:http://www.jb51.net/article/84869.htm

總結

以上是生活随笔為你收集整理的python中frozenset( )和set()的用法区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。