- 零基礎(chǔ)入門學(xué)習(xí)Python(第2版)
- 小甲魚
- 814字
- 2019-12-20 12:19:44
7.2 集合:在我的世界里,你就是唯一

視頻講解
Python的字典是對數(shù)學(xué)中映射概念支持的直接體現(xiàn),然而今天我們請來了字典的“表親”:集合。
難道它們長得很像?來,大家看下代碼:
>>> num1 = {} >>> type(num1) <class 'dict'> >>> num2 = {1, 2, 3, 4, 5} >>> type(num2) <class 'set'>
在Python 3里,如果用大括號(hào)括起一堆數(shù)字但沒有體現(xiàn)出映射關(guān)系,那么Python就會(huì)認(rèn)為這堆數(shù)據(jù)是一個(gè)集合而不是映射。
集合在Python中的最大特點(diǎn)就是兩個(gè)字:唯一。
舉個(gè)例子:
>>> num = {1, 2, 3, 4 ,5, 4, 3, 2, 1} >>> num {1, 2, 3, 4, 5}
大家看到,根本不需要額外做些什么,集合就會(huì)自動(dòng)地將重復(fù)的數(shù)據(jù)刪除,這樣是不是很方便呢?但要注意的是,集合是無序的,也就是不能試圖去索引集合中的某一個(gè)元素:

7.2.1 創(chuàng)建集合
創(chuàng)建集合有兩種方法:一種是直接把一堆元素用大括號(hào)({})括起來;另一種是用set()內(nèi)置函數(shù)。
>>> set1 = {"小甲魚", "小魷魚", "小鯉魚", "小甲魚"} >>> set2 = set(["小甲魚", "小魷魚", "小鯉魚", "小甲魚"]) >>> set1 == set2 True
現(xiàn)在要求去除列表[1, 2, 3, 4, 5, 5, 3, 1, 0]中重復(fù)的元素,如果還沒有學(xué)習(xí)過集合,可能代碼要這么寫:

學(xué)習(xí)了集合之后,就可以這么寫:
>>> list1 = [1, 2, 3, 4, 5, 5, 3, 1, 0] >>> list1 = list(set(list1)) >>> list1 [0, 1, 2, 3, 4, 5]
看,知識(shí)才是第一生產(chǎn)力!不過大家發(fā)現(xiàn)沒有,由于set()創(chuàng)造的集合內(nèi)部是無序的,所以再調(diào)用list()將無序的集合轉(zhuǎn)換成列表就不能保證原來的列表順序了(這里Python好心辦壞事兒,把0放到最前面了),所以如果關(guān)注列表中元素的排序問題,那么在使用set()函數(shù)時(shí)就要提高警惕。
7.2.2 訪問集合
由于集合中的元素是無序的,所以并不能像序列那樣用下標(biāo)來進(jìn)行訪問,但是可以使用迭代把集合中的數(shù)據(jù)一個(gè)個(gè)讀取出來:

當(dāng)然也可以使用in和not in判斷一個(gè)元素是否在集合中已經(jīng)存在:
>>> 0 in set1 True >>> 'oo' in set1 False >>> 'xx' not in set1 True
使用add()方法可以為集合添加元素,使用remove()方法可以刪除集合中已知的元素:
>>> set1.add(6) >>> set1 {0, 1, 2, 3, 4, 5, 6} >>> set1.remove(5) >>> set1 {0, 1, 2, 3, 4, 6}
7.2.3 不可變集合
有時(shí)候希望集合中的數(shù)據(jù)具有穩(wěn)定性,也就是說,像元組一樣,不能隨意地增加或刪除集合中的元素。那么可以定義成不可變集合,這里使用的是frozenset()函數(shù),就是把元素給frozen(冰凍)起來:

- Java面向?qū)ο笏枷肱c程序設(shè)計(jì)
- Linux核心技術(shù)從小白到大牛
- Windows系統(tǒng)管理與服務(wù)配置
- JavaScript+jQuery開發(fā)實(shí)戰(zhàn)
- RTC程序設(shè)計(jì):實(shí)時(shí)音視頻權(quán)威指南
- Internet of Things with Intel Galileo
- C語言程序設(shè)計(jì)同步訓(xùn)練與上機(jī)指導(dǎo)(第三版)
- Spring Boot Cookbook
- Hands-On Natural Language Processing with Python
- Test-Driven Machine Learning
- C專家編程
- Android群英傳
- Illustrator CS6設(shè)計(jì)與應(yīng)用任務(wù)教程
- Python期貨量化交易實(shí)戰(zhàn)
- Angular Design Patterns