官术网_书友最值得收藏!

6.2 集合

Python中的集合(set)與數學中的集合概念類似,也是用于保存不重復的元素。它有可變集合(set)和不可變集合(frozenset)兩種。其中,本節所要介紹的set集合是無序可變序列,而另一種在本書中不做介紹。在形式上,集合的所有元素都放在一對大括號“{}”中,兩個相鄰元素間使用逗號“,”分隔。集合最好的應用就是去重,因為集合中的每個元素都是唯一的。

說明

在數學中,集合的定義是把一些能夠確定的不同的對象看成一個整體,而這個整體就是由這些對象的全體構成的集合。集合通常用大括號“{}”或者大寫的拉丁字母表示。

集合最常用的操作就是創建集合,以及集合的添加、刪除、交集、并集和差集等運算,下面分別進行介紹。

6.2.1 創建集合

在Python中提供了兩種創建集合的方法,一種是直接使用“{}”創建;另一種是通過set()函數將列表、元組等可迭代對象轉換為集合。筆者推薦使用第二種方法。下面分別進行介紹。

1.直接使用“{}”創建

在Python中,創建set集合也可以像列表、元組和字典一樣,直接將集合賦值給變量,從而實現創建集合,即直接使用大括號“{}”創建。語法格式如下:

    setname = {element 1,element 2,element 3,...,element n}

其中,setname表示集合的名稱,可以是任何符合Python命名規則的標識符;element 1、element 2、element 3、element n表示集合中的元素,個數沒有限制,并且只要是Python支持的數據類型就可以。

注意

在創建集合時,如果輸入了重復的元素,Python會自動只保留一個。

例如,下面的每行代碼都可以創建一個集合。

01  set1 = {'水瓶座','射手座','雙魚座','雙子座'}
02  set2 = {3,1,4,1,5,9,2,6}
03  set3 = {'Python', 28, ('人生苦短', '我用Python')}

上面的代碼將創建以下集合。

    {'水瓶座', '雙子座', '雙魚座', '射手座'}
    {1, 2, 3, 4, 5, 6, 9}
    {'Python', ('人生苦短', '我用Python'), 28}

說明

由于Python中的set集合是無序的,所以每次輸出時元素的排列順序可能與上面的不同,不必在意。

場景模擬:某大學的學生選課系統,可選語言有Python和C語言?,F創建兩個集合分別保存選擇Python語言的學生名字和選擇C語言的學生名字。

【例6.4】 創建保存學生選課信息的集合。(實例位置:資源包\TM\sl\06\04)

在IDLE中創建一個名稱為section_create.py的文件,然后在該文件中定義兩個包括4個元素的集合,再輸出這兩個集合,代碼如下:

運行代碼后,將顯示如圖6.7所示的結果。

圖6.7 創建集合

2.使用set()函數創建

在Python中,可以使用set()函數將列表、元組等其他可迭代對象轉換為集合。set()函數的語法格式如下:

    setname = set(iteration)

參數說明如下:

 setname:表示集合名稱;

 iteration:表示要轉換為集合的可迭代對象,可以是列表、元組、range對象等。另外,也可以是字符串,如果是字符串,返回的集合將是包含全部不重復字符的集合。

例如,下面的每行代碼都可以創建一個集合。

01  set1 = set("命運給予我們的不是失望之酒,而是機會之杯。")
02  set2 = set([1.414,1.732,3.14159,2.236])
03  set3 = set(('人生苦短', '我用Python'))

上面的代碼將創建以下集合。

    {'不', '的', '望', '是', '給', ',', '我', '。', '酒', '會', '杯', '運', '們', '予', '而', '失', '機', '命', '之'}
    {1.414, 2.236, 3.14159, 1.732}
    {'人生苦短', '我用Python'}

從上面創建的集合結果中可以看出,在創建集合時,如果出現了重復元素,那么將只保留一個,例如在第一個集合中的“是”和“之”都只保留了一個。

注意

在創建空集合時,只能使用set()實現,而不能使用一對大括號“{}”實現,這是因為在Python中,直接使用一對大括號“{}”表示創建一個空字典。

下面將實例6.4修改為使用set()函數創建保存學生選課信息的集合。修改后的代碼如下:

執行結果如圖6.7所示。

說明

在Python中,創建集合時推薦采用set()函數實現。

6.2.2 向集合中添加和刪除元素

集合是可變序列,所以在創建集合后,還可以對其添加或者刪除元素。下面分別進行介紹。

1.向集合中添加元素

向集合中添加元素可以使用add()方法實現。它的語法格式如下:

    setname.add(element)

其中,setname表示要添加元素的集合;element表示要添加的元素內容。這里只能使用字符串、數字及布爾類型的True或者False等,不能使用列表、元組等可迭代對象。

例如,定義一個保存明日科技零基礎學系列圖片名字的集合,然后向該集合中添加一個剛剛上市的圖書名字,代碼如下:

01  mr = set(['零基礎學Java','零基礎學Android','零基礎學C語言','零基礎學C#','零基礎學PHP'])
02  mr.add('零基礎學Python')  # 添加一個元素
03  print(mr)

上面的代碼運行后,將輸出以下集合。

    {'零基礎學PHP', '零基礎學Android', '零基礎學C#', '零基礎學C語言', '零基礎學Python', '零基礎學Java'}
2.從集合中刪除元素

在Python中,可以使用del命令刪除整個集合,也可以使用集合的pop()方法或者remove()方法刪除一個元素,或者使用集合對象的clear()方法清空集合,即刪除集合中的全部元素,使其變為空集合。

例如,下面的代碼將分別實現從集合中刪除指定元素、刪除一個元素和清空集合。

上面的代碼運行后,將輸出以下內容。

    使用remove()方法移除指定元素后: {'零基礎學Android', '零基礎學PHP', '零基礎學C語言', '零基礎學Java', '零
    基礎學C#'}
    使用pop()方法移除一個元素后: {'零基礎學PHP', '零基礎學C語言', '零基礎學Java', '零基礎學C#'}
    使用clear()方法清空集合后: set()

注意

使用集合的remove()方法時,如果指定的內容不存在,將拋出如圖6.8所示的異常。所以在移除指定元素前,最好先判斷其是否存在。要判斷指定的內容是否存在,可以使用in關鍵字實現。例如,使用“'零語'in c”可以判斷在c集合中是否存在“零語”。

圖6.8 從集合中移除的元素不存在時拋出異常

場景模擬:仍然是某大學的學生選課系統,聽說連小學生都學Python,“零語”同學決定放棄學習C語言,改為學習Python。

【例6.5】 學生更改所選課程。(實例位置:資源包\TM\sl\06\05)

在IDLE中創建一個名稱為section_add.py的文件,然后在該文件中定義一個包括4個元素的集合,并且應用add()函數向該集合中添加一個元素,再定義一個包括4個元素的集合,并且應用remove()方法從該集合中刪除指定的元素,最后輸出這兩個集合,代碼如下:

運行代碼后,將顯示如圖6.9所示的結果。

圖6.9 向集合中添加和刪除元素

6.2.3 集合的交集、并集和差集運算

集合最常用的操作就是進行交集、并集、差集和對稱差集運算。進行交集運算時使用“&”符號;進行并集運算時使用“|”符號;進行差集運算時使用“-”符號,進行對稱差集運算時使用“^”符號。下面通過一個具體的實例演示如何對集合進行交集、并集和差集運算。

場景模擬:仍然是某大學的學生選課系統,學生選課完畢后,老師要對選課結果進行統計。這時,需要知道哪些學生既選擇了Python語言又選擇了C語言,參與選課的全部學生,以及選擇了Python語言但沒有選擇C語言的學生。

【例6.6】 對選課集合進行交集、并集和差集運算。(實例位置:資源包\TM\sl\06\06)

在IDLE中創建一個名稱為section_operate.py的文件,然后在該文件中定義兩個包括4個元素的集合,再根據需要對兩個集合進行交集、并集和差集運算,并輸出運算結果,代碼如下:

在上面的代碼中,為了獲取既選擇了Python語言又選擇C語言的學生名字,對兩個集合進行交集運算;為了獲取參與選課的全部學生名字,對兩個集合進行并集運算;為了獲取選擇了Python語言但沒有選擇C語言的學生名字,對兩個集合進行差集運算。

運行代碼后,將顯示如圖6.10所示的結果。

圖6.10 對選課集合進行交集、并集和差集運算

主站蜘蛛池模板: 乌鲁木齐市| 绍兴县| 雷波县| 微博| 察哈| 通化市| 彭阳县| 汪清县| 肥乡县| 阳信县| 涟水县| 沙田区| 兰西县| 伽师县| 婺源县| 东明县| 花莲县| 古蔺县| 屯留县| 普安县| 和田市| 嵩明县| 芷江| 遂平县| 灵丘县| 花垣县| 井研县| 景东| 合肥市| 龙胜| 礼泉县| 元朗区| 永善县| 榆林市| 肇庆市| 卫辉市| 昌图县| 康乐县| 运城市| 扎兰屯市| 盘山县|