Python集合的基礎(chǔ)操作
1、集合
Python
中的集合和數(shù)學(xué)上的集合基本是沒有區(qū)別的,是無序的,即不可以使用索引訪問的,集合中是不能出現(xiàn)重復(fù)元素的。
2、創(chuàng)建集合
在Python
中創(chuàng)建集合使用花括號{}
字面量的方式,或者使用set()
來創(chuàng)建一個集合。使用{}
中必須至少含一個元素,創(chuàng)建空集合不能使用{}
,這樣創(chuàng)建的是空字典,應(yīng)該使用set()
的方式來創(chuàng)建一個集合。
# 使用字面量方法創(chuàng)建集合 set1 = {"Hello", "World"} print(type(set1), set1) # <class 'set'> {'World', 'Hello'} # print(set1[1]) # TypeError: 'set' object does not support indexing # 使用set()的方式創(chuàng)建 set2 = set("hello") # {'l', 'o', 'h', 'e'}集合會去掉重復(fù)的元素,即"l" print(set2) # 創(chuàng)建空集合 set3 = {} set4 = set() print(type(set3), type(set4)) # <class 'dict'>字典 <class 'set'> list1 = [1, 2, 3, 4, 3, 5, 1, 3] # 將列表轉(zhuǎn)換為集合 set6 = set(list1) print(type(set6), set6) # <class 'set'> {1, 2, 3, 4, 5} # 使用生成列生成列表 set5 = {num for num in range(20) if num % 3 == 0} print(set5) # {0, 3, 6, 9, 12, 15, 18} # 遍歷循環(huán) for ch in set5: print(ch)
注意:集合中的元素為不可變的類型,如整數(shù)、浮點(diǎn)、字符串、元組等,也就是說可變類型不能作為元組的元素,集合本身也是可變類型,所以集合不能夠作為集合中的元素。
3、集合的運(yùn)算
集合數(shù)據(jù)類型擁有超多的運(yùn)算符,包括成員運(yùn)算、交集運(yùn)算、并集運(yùn)算、差集運(yùn)算、比較運(yùn)算(相等性、子集、超集)等。
3.1 成員運(yùn)算
可以通過成員運(yùn)算in
和not in
檢查元素是否在集合中,
示例代碼如下:
set1 = {"你好", "Python", "這個是", "集合", "set"} print("Python" in set1) # True print("您好" in set1) # False print("set" not in set1) # False print("list" not in set1) # True
3.2 交并差運(yùn)算
Python
中的集合跟數(shù)學(xué)上的集合一樣,可以進(jìn)行交集、并集、差集等運(yùn)算,而且可以通過運(yùn)算符和方法調(diào)用兩種方式來進(jìn)行操作。
示例代碼如下:
set1 = {1, 2, 3, 4, 5, 6, 7}
set2 = {2, 4, 6, 8, 10}
# 交集(咱倆都有的) # 方法一: 使用 & 運(yùn)算符 print(set1 & set2) # {2, 4, 6} # 方法二: 使用intersection方法 print(set1.intersection(set2)) # {2, 4, 6} # 并集(咱倆加在一起) # 方法一: 使用 | 運(yùn)算符 print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8, 10} # 方法二: 使用union方法 print(set1.union(set2)) # {1, 2, 3, 4, 5, 6, 7, 8, 10} # 差集(我不要你有的) # 方法一: 使用 - 運(yùn)算符 print(set1 - set2) # {1, 3, 5, 7} # 方法二: 使用difference方法 print(set1.difference(set2)) # {1, 3, 5, 7} # 對稱差(咱倆不要你的和我的,只要專一的) # 方法一: 使用 ^ 運(yùn)算符 print(set1 ^ set2) # {1, 3, 5, 7, 8, 10} # 方法二: 使用symmetric_difference方法 print(set1.symmetric_difference(set2)) # {1, 3, 5, 7, 8, 10} # 方法三: 對稱差相當(dāng)于兩個集合的并集減去交集 print((set1 | set2) - (set1 & set2)) # {1, 3, 5, 7, 8, 10}
集合的交集、并集、差集運(yùn)算還可以跟賦值運(yùn)算一起構(gòu)成復(fù)合運(yùn)算,
示例代碼如下:
set1 = {1, 3, 5, 7} set2 = {2, 4, 6} # 將set1和set2求并集再賦值給set1 # 也可以通過set1.update(set2)來實現(xiàn) set1 |= set2 # set1 = set1 | set2 print(set1) # {1, 2, 3, 4, 5, 6, 7} set3 = {3, 6, 9} # 將set1和set3求交集再賦值給set1 # 也可以通過set1.intersection_update(set3)來實現(xiàn) set1 &= set3 # set1 = set1 & set3 print(set1) # {3, 6}
3.3 比較運(yùn)算
兩個集合可以用==和!=進(jìn)行相等性判斷,如果兩個集合中的元素完全相同,那么==
比較的結(jié)果就是True
,否則就是False;!=則反之。
如果集合A的所有的元素也是集合B的元素,就稱為A是B的子集,B是A的超集;如果集合A的子級且不等于集合B,那就稱為A是B的真子級。判斷子集和超集的運(yùn)算符為<和>。示例代碼↓
set1 = {1, 3, 5} set2 = {1, 2, 3, 4, 5} set3 = set2 # <運(yùn)算符表示真子集,<=運(yùn)算符表示子集 print(set1 < set2, set1 <= set2) # True True print(set2 < set3, set2 <= set3) # False True # 通過issubset方法也能進(jìn)行子集判斷 print(set1.issubset(set2)) # True print(set2.issubset(set2)) # True # issubset方法和<=運(yùn)算符是等價的 # 反過來可以用issuperset或>運(yùn)算符進(jìn)行超集判斷 print(set2.issuperset(set1)) # True print(set2 > set1) # True
4、集合的方法
集合屬于可變列類型,可以通過集合類型的方法對集合的元素進(jìn)行修改,
示例代碼:
# 創(chuàng)建一個空集合 set1 = set() # 通過add()方法為集合添加元素 set1.add(1) set1.add(2) print(set1) # {1, 2} # 通過update()給集合添加元素 set1.update({1, 2, 3, 4, 5}) print(set1) # {1, 2, 3, 4, 5} 元素在集合中已存在,該元素只會出現(xiàn)一次 # 通過discard()方法刪除指定元素 set1.discard(4) set1.discard(2) set1.discard(22) # 集合里面沒有不會出錯 print(set1) # {1, 3, 5} # 通過remove()方法刪除指定元素 # set1.remove(6) # KeyError: 6,使用remove()方法刪除指定元素時先做成員運(yùn)算就不會出錯了 if 6 in set1: set1.remove(6) # pop方法可以從集合中隨機(jī)刪除一個元素并返回該元素 print(set1.pop()) # 1 本次剔除的是1 # clear方法可以清空整個集合 set1.clear() print(type(set1)) # <class 'set'> print(set1) # set() # 通過isdisjoint()方法判斷兩個集合有沒有重復(fù)的元素,有返回False沒有則返回Ture set2 = {"Hello", "World"} set3 = {"Hello", "一碗周"} set4 = {"Hi", "Python"} print(set2.isdisjoint(set3)) # False print(set2.isdisjoint(set4)) # True
5、不可變集合
Python
中還有一種不可變類型的集合,名字叫frozenset
,于集合的區(qū)別就跟列表和元組的區(qū)別一樣。除了不能添加和刪除元素,frozenset
在其他方面跟set
基本是一樣的。
示例代碼:
set1 = frozenset({1, 3, 5, 7}) set2 = frozenset(range(1, 6)) print(set1 & set2) # frozenset({1, 3, 5}) print(set1 | set2) # frozenset({1, 2, 3, 4, 5, 7}) print(set1 - set2) # frozenset({7}) print(set1 < set2) # False
到此這篇關(guān)于Python
集合的基礎(chǔ)操作的文章就介紹到這了,更多相關(guān)Python
集合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python腳本監(jiān)控Tomcat服務(wù)器的方法
這篇文章主要介紹了利用python腳本監(jiān)控Tomcat服務(wù)器的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07Python使用sqlite3模塊內(nèi)置數(shù)據(jù)庫
這篇文章主要介紹了Python使用sqlite3模塊內(nèi)置數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05python使用beautifulsoup從愛奇藝網(wǎng)抓取視頻播放
這篇文章主要介紹了python使用beautifulsoup從愛奇藝網(wǎng)抓取視頻并播放示例,大家參考使用吧2014-01-01Python通過樸素貝葉斯和LSTM分別實現(xiàn)新聞文本分類
樸素貝葉斯法(Naive Bayes model)是基于貝葉斯定理與特征條件獨(dú)立假設(shè)的分類方法。LSTM則是一種時間循環(huán)神經(jīng)網(wǎng)絡(luò),適合于處理和預(yù)測時間序列中間隔和延遲相對較長的重要事件。本文將通過這兩個方法分別實現(xiàn)新聞文本分類,需要的可以參考一下2021-12-12