set也是一種組合數據類型,支持成員關系操作(in)、對象大小計算操作符(len()),并且是iterable。集合數據類型至少提供一個set.isdisjoin()方法,支持比較,也支持為邏輯操作(在集合用于聯合、交叉等上下文中使用)。只有可哈希運算的對象可以添加到集合中,可哈希運算的對象包含一個__hash__()特殊方法,其返回值在某個對象的整個生命周期內都是相同的,并且可以使用__eq()__特殊方法進行相等性比較。
所有內置的固定數據類型(比如float、frozenset、int、str、tuple)都是可哈希運算的,都可以添加到集合中。內置的可變數據類型(比如dict、list、set)都不是可哈希運算的,因為其哈希值會隨著包含項數的變化而變化。
操作符==與!=都是逐項比較(對嵌套項,比如集合內的元組或固定集合,則遞歸比較)其他比較操作符則進行子集比較火超集比較。
可變的set類型 {}
集合中的項是無序的,沒有索引位置的概念,不能分片或按步距分片。set數據類型可以作為函數進行調用,不帶參數進行調用時將返回一個空集合;帶一個set參數時返回該參數的淺拷貝;對任意其他參數,則嘗試將給定的對象轉換為集合。空集合必須使用set()創建,而不能使用{}來創建。
set(“apple”)、set(“aple”)和{‘e’,‘p’,‘a’,‘l’}產生的三個集合都是一樣的。集合常用語刪除重復的數據項。比如,x是一個字符串列表,在執行x=list(set(x))后,x中的每個字符串都將是獨一無二的,存放順序也是任意的。集合支持內置的len函數,也支持使用in與not in進行快速成員關系測試。
舉例,從文件列表中刪除makefile文件
集合內涵
除了調用set()創建集合,或使用集合字面值創建集合外,可以使用集合內涵創建集合。
舉例:html = {x for x in files if x.lower().endswitch((".htm",".html"))} 集合內涵中使用的iterable本身也可以是集合內涵(或任何其他類型的內核)
tem = set() for x in files if x.lower().endswith((".htm",".html")) tem.add(x)
固定的frozenset類型
固定集合是指一旦創建舊不能改變的集合,固定集合只能使用frozenset數據類型函數進行創建,不帶參數調用時,frozenset(0將返回一個空的固定集合,帶一個frozenset參數時,將返回該參數的淺拷貝,對任何其他類型的參數,都嘗試將給定的對象轉換為一個frozenset。該函數只能接受一個參數。
如果將二元運算符應用于集合與固定集合,那么產生結果的數據類型與左邊操作數的數據類型一致。因此,如果f是一個固定集合,s是一個集合,那么f&s將產生一個固定集合,s&f則產生一個集合。在使用與!=等操作符時,操作數的順序無關緊要,如果兩個集合包含相同的項,那么fs結果為True。
本文地址:https://blog.csdn.net/asmartkiller/article/details/108237831
希望與廣大網友互動??
點此進行留言吧!