1. 程式人生 > 其它 >《Python零基礎快樂學習之旅》學習筆記10——集合(set)

《Python零基礎快樂學習之旅》學習筆記10——集合(set)

技術標籤:學習筆記Pythonpython集合

文章目錄

第10章 集合(set)

集合的基本概念是無序且每個元素都是唯一的,集合元素的內容是不可變的,常見的元素有整數浮點數字串元組等。而可變內容如列表字典集合等,不可以作為集合的元素。但集合本身是可變的,可以增加或刪除集合的元素。

10.1 建立集合

Python可以使用大括號“{}

” 或set() 函式建立集合。

10.1.1 使用大括號建立集合

程式例項:

languages = {'Python', 'C', 'Java', 'PHP', 'C#'}
print("列印集合:", languages)
print("列印類別:", type(languages))

執行結果:

列印集合: {'C#', 'Java', 'C', 'PHP', 'Python'}
列印類別: <class 'set'>

輸出結果與集合集合建立時的順序不一樣,這也體現了集合的特點:無序。此外,集合的特色元素是唯一的,如果設定集合時有重複元素的情況,多餘的部分將被捨去。

程式例項:

numbers = {12, 13, 46, 25, 30, 13, 12}
print(numbers)

執行結果:

{12, 13, 46, 25, 30}

集合內容可由不同資料型別的資料組成。但由於集合中的元素是不可變的,列表、字典、集合等不能作為集合的元素。

程式例項:

# 集合由整數所組成
integer_set = {1, 3, 5, 7, 9}
print(integer_set)

# 集合由不同資料型別所組成
mixed_set = {10086, 'javascript', (110, 120, 4399), 3.1415926}
print(mixed_set)

# 集合中的元素是不可變的,列表、字典、集合等不能作為集合的元素
mixed_set = {'一念永恆', ['apple', 'orange'], {0:'football', 1:9527}, {'a', 'b', 'c'}} print(mixed_set)

執行結果:
在這裡插入圖片描述

儘管字典和集合都是用大括號定義的,但使用空的大括號定義的是空字典而非空集合。

10.1.2 使用set()函式定義集合

使用內建的set()函式建立集合時,set()函式引數的內容可以是字串列表元組等。這時原先字串、列表、元組的元素將被轉成集合元素。

使用set()函式可以建立空集合。

程式例項:

empty_dict = {}     # 建立空字典
print(type(empty_dict))
empty_set = set()   # 建立空集合
print(type(empty_set))

執行結果:

<class 'dict'>
<class 'set'>

可以使用字串、列表、元組、整數、浮點數等中的一種或多種作為引數建立集合。

程式例項:

# 使用字串建立集合並列印
set1 = set('Hello world')
print(set1, " ", type(set1))

# 使用列表建立集合並列印
# 建立列表
fruits = ['apple', 'banana', 'orange', 'pear']
set2 = set(fruits)
print(set2)
set3 = set([1, 'java', 'php'])
print(set3)

# 使用元組建立集合並列印
cities = set(('Beijing', 'Shanghai', 'Guangzhou', 'Xian'))
print(cities)

# 使用不同資料型別建立集合並列印
mixed_set = {'ONE PIECE', 4399, ('十萬火急', '大戰元泱界', '戰神崛起'), 0.618}
print(mixed_set)

執行結果:

{'e', 'l', 'w', 'r', ' ', 'H', 'd', 'o'}   <class 'set'>
{'banana', 'pear', 'orange', 'apple'}
{'java', 1, 'php'}
{'Xian', 'Shanghai', 'Beijing', 'Guangzhou'}
{0.618, 'ONE PIECE', ('十萬火急', '大戰元泱界', '戰神崛起'), 4399}

利用集合中的元素不允許重複的特性,可以快速將列表中的重複資料去除。

程式例項:

fruits1 = ['apple', 'orange', 'banana', 'orange', 'peach', 'apple', 'banana']
print("原先列表資料fruits1:", fruits1)
x = set(fruits1)        # 將列表轉成集合
print("轉為集合後的資料內容:", x)
fruits2 = list(x)       # 將集合轉成列表
print("新的列表資料fruits2:", fruits2)

執行結果:

原先列表資料fruits1: ['apple', 'orange', 'banana', 'orange', 'peach', 'apple', 'banana']
轉為集合後的資料內容: {'peach', 'banana', 'apple', 'orange'}
新的列表資料fruits2: ['peach', 'banana', 'apple', 'orange']

10.2 集合的操作

集合常見的操作有交集(&)、並集(|)、差集(-)、和是否成員(in)。

10.2.1 交集(intersection)

兩個集合之間相同的部分稱為交集。在Python中,交集符號表示為”&“,此外也可以使用intersection() 方法實現這個功能。

程式例項:

fruits1 = {'apple', 'orange', 'pear', 'watermelon'}
fruits2 = {'orange', 'peach', 'apple', 'cherry'}

# 使用交集符號“&”求兩個集合的交集
fruits3 = fruits1 & fruits2   # 取fruits1和fruits2的交集
print("集合fruits1和fruits2的交集為:", fruits3)

# 使用intersection()方法求交集
# fruits1與fruits2的交集
fruits4 = fruits1.intersection(fruits2)
print("集合fruits1和fruits2的交集為:", fruits4)

# fruits2與fruits1的交集
fruits5 = fruits2.intersection(fruits1)
print("集合fruits2和fruits1的交集為:", fruits5)

執行結果:

集合fruits1和fruits2的交集為: {'apple', 'orange'}
集合fruits1和fruits2的交集為: {'apple', 'orange'}
集合fruits2和fruits1的交集為: {'apple', 'orange'}

10.2.2 並集(union)

假如有兩個集合A與B,將集合A和集合B中所有的元素合併在一起組成新的集合,這個新的集合稱為集合A與集合B的並集。在Python中,並集符號表示為”|“,此外,也可以使用union() 方法實現這個功能。

程式例項:

fruits1 = {'apple', 'orange', 'pear', 'watermelon'}
fruits2 = {'orange', 'peach', 'apple', 'cherry'}
fruits = fruits1 | fruits2
print("列出所有水果:",fruits)

# 使用union()方法求並集
# 求fruits1與fruits2的並集
fruits1unionfruits2 = fruits1.union(fruits2)
print("fruits1與fruits2的並集:",fruits1unionfruits2)

# 求fruits2與fruits1的並集
fruits2unionfruits1 = fruits2.union(fruits1)
print("fruits2與fruits1的並集:",fruits2unionfruits1)

執行結果:

列出所有水果: {'cherry', 'apple', 'orange', 'watermelon', 'peach', 'pear'}
fruits1與fruits2的並集: {'cherry', 'apple', 'orange', 'watermelon', 'peach', 'pear'}
fruits2與fruits1的並集: {'cherry', 'apple', 'orange', 'watermelon', 'peach', 'pear'}

10.2.3 差集(difference)

有A和B兩個集合,如果想要獲得屬於集合A但不屬於集合B的元素,則可以使用差集(A-B)。同理,要獲得屬於集合B但不屬於集合A的元素,則可以使用差集(B-A)。在Python中,差集符號表示為”-“,此外,使用difference() 方法也可以實現這樣的功能。

程式例項:

fruits1 = {'apple', 'orange', 'pear', 'watermelon'}
fruits2 = {'orange', 'peach', 'apple', 'cherry'}
# 使用差集符號“-”求差集
# 求fruits1與fruits2的差集
fruits1_only = fruits1 - fruits2
print("在fruits1集合中而不在fruits2集合中的水果:",fruits1_only)
# 求fruits2與fruits1的差集
fruits2_only = fruits2 - fruits1
print("在fruits2集合中而不在fruits1集合中的水果:",fruits2_only)

# 使用difference()方法求差集
# fruits1-fruits2的差集
fruits1_fruits2 = fruits1.difference(fruits2)
print("fruits1-fruits2的差集:",fruits1_fruits2)
# fruits2-fruits1的差集
fruits2_fruits1 = fruits2.difference(fruits1)
print("fruits2-fruits1的差集:",fruits2_fruits1)

執行結果:

在fruits1集合中而不在fruits2集合中的水果: {'watermelon', 'pear'}
在fruits2集合中而不在fruits1集合中的水果: {'peach', 'cherry'}
fruits1-fruits2的差集: {'watermelon', 'pear'}
fruits2-fruits1的差集: {'peach', 'cherry'}

10.2.4 是否成員(in)

Python的關鍵詞in可以測試元素是否是集合中的元素。

程式例項:

# 方法1
fruits = set("orange")
print("字元a是集合fruits中的元素?", 'a' in fruits)
print("字元c是集合fruits中的元素?", 'c' in fruits)
# 方法2
sports = {'football', 'basketball', 'tennis'}
boolean = "football" in sports
print("football in sports? ",boolean)
boolean = "swim" in sports
print("swim in sports? ",boolean)

執行結果:

字元a是集合fruits中的元素? True
字元c是集合fruits中的元素? False
football in sports?  True
swim in sports?  False

往期文章: