在 Python 中,Set(集合) 是一種
-無序
-不重複的數據結構。
-它類似於數學中的集合,用於存儲唯一的值。
-可以同時儲存不同資料型態
-無序:Set 中的每個元素沒有特定的順序,這意味著不能通過索引(像列表那樣)來訪問元素。
-唯一性:Set 中的每個元素都是唯一的,重複的值會自動被過濾掉。
-可變:Set 本身是可變的,可以增加或刪除元素,但 Set 中的元素必須是不可變的(如整數、字串、元組等)。
empty_set = set()
print(empty_set) # Output: set()
# 創建一個 Set,並自動去除重複元素
my_set = {1, 2, 3, 4, 5, 5}
print(my_set) # Output: {1, 2, 3, 4, 5}
#可以同時儲存不同資料型態
multipleType ={ 2,'apple',False}
所以一定要用set()來建立集合?
不一定要先用 set() 來創建一個集合。你可以直接使用大括號 {} 來創建一個集合並初始化其元素。
但是,如果你想創建空集合,就必須使用 set(),因為 {} 會被解釋為空字典。這是唯一的情況需要用到 set() 函數來明確創建集合。
# 創建空集合,必須用 set()
empty_set = set()
print(empty_set) # Output: set()
# 注意:如果你用 {} 創建,會得到空字典
empty_dict = {}
print(type(empty_dict)) # Output: <class 'dict'>
所以只有當你需要創建空集合時,才必須使用 set()。其他情況下,直接使用 {} 並填入元素即可。
{expression for item in iterable if condition}
# 創建一個包含 1 到 10 的平方數的集合
squares = {x**2 for x in range(10)}
print(squares) # 输出:{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
# 創建一個包含字符串 'hello' 中所有唯一字母的集合
unique_letters = {char for char in 'hello'}
print(unique_letters) # 输出:{'h', 'e', 'l', 'o'}
# 創建一個包含 1 到 20 之間所有偶數的集合
even_numbers = {x for x in range(20) if x % 2 == 0}
print(even_numbers) # 输出:{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}
-列表 (list)
-元組 (tuple)
-字串 (string)
-字典 (dictionary)(只會取字典的鍵)
-集合 (set) 本身(這是拷貝的方式)
-範圍 (range)
可迭代物件類型 | 範例 | 轉換為集合的範例 | 輸出結果 |
---|---|---|---|
列表 (list) | ['apple', 'banana', 'orange'] |
set(['apple', 'banana', 'orange']) |
{'apple', 'banana', 'orange'} |
元組 (tuple) | ('apple', 'banana', 'orange') |
set(('apple', 'banana', 'orange')) |
{'apple', 'banana', 'orange'} |
字串 (string) | "apple" |
set("apple") |
{'a', 'e', 'p', 'l'} |
字典 (dictionary) | {'apple': 1, 'banana': 2, 'orange': 3} |
set({'apple': 1, 'banana': 2, 'orange': 3}) |
{'apple', 'banana', 'orange'} |
集合 (set) | {'apple', 'banana', 'orange'} |
set({'apple', 'banana', 'orange'}) |
{'apple', 'banana', 'orange'} |
範圍 (range) | range(1, 5) |
set(range(1, 5)) |
{1, 2, 3, 4} |
my_set ={1,2,3}
操作 | 描述 | 範例 |
---|---|---|
add() |
將一個元素添加到集合中 | my_set.add(6)->{1,2,3,6} |
remove() |
從集合中移除指定元素,若元素不存在則報錯 | my_set.remove(3)-> {1,2,6} |
discard() |
從集合中移除指定元素,若元素不存在則不報錯 | my_set.discard(10) |
clear() |
移除集合中的所有元素 | my_set.clear()->{} |
in |
檢查某個元素是否存在於集合中 | my_set = {1,2,3,4} print(3 in my_set )→ True |
not in |
檢查某個元素沒有存在於集合中 | my_set = {1,2,3,4} print(4 in my_set )→ false |
函數 | 描述 | 範例 |
---|---|---|
len(iterable) |
返回可迭代對象的元素個數。 | len({1, 2, 3, 4, 5}) 返回 5 |
sum(iterable, start=0) |
返回可迭代對象中所有元素的總和,start 為可選參數,表示總和的起始值(默認為 0)。 |
sum({1, 2, 3, 4, 5}) 返回 15 |
max(iterable, *[, key]) |
返回可迭代對象中的最大值,key 為可選參數,用於指定自定義的比較函數。 |
max({1, 2, 3, 4, 5}) 返回 5 |
min(iterable, *[, key]) |
返回可迭代對象中的最小值,key 為可選參數,用於指定自定義的比較函數。 |
min({1, 2, 3, 4, 5}) 返回 1 |
1.iterable
:
-這是函數的第一個參數,表示一個可迭代對象(例如列表、元組或集合)。函數將在這個可迭代對象中查找最大值。
2.*
:
-星號 * 表示後面的參數是可變長度的,也就是說,你可以傳遞多個額外的位置參數。這意味著你可以將多個可迭代對象一起傳遞給 max() 函數。例如:max(set1, set2)。
3.[, key]
:
-方括號 [] 表示這個參數是可選的。在這裡,key 是一個可選的參數,它允許你指定一個函數,用來從每個元素中提取比較的值。這個函數將應用於可迭代對象中的每個元素,以確定哪個元素是最大的。
-例如,如果你有一個由元組組成的可迭代對象,你可以使用 key 參數來指定根據元組的第二個元素來找到最大值。
# 基本用法
numbers = {1, 3, 2, 5, 4}
maximum = max(numbers) # 返回 5
# 使用可變參數
max_of_multiple_sets = max({1, 2}, {3, 4}) # 返回 4,因為 4 是所有集合中的最大值
# 使用 key 參數
tuples = [(1, 2), (3, 1), (2, 3)]
# 找到元組中第二個元素最大的元組
max_tuple = max(tuples, key=lambda x: x[1]) # 返回 (2, 3)
-基本語法:lambda arguments: expression
-這裡的 arguments 是你想傳遞給匿名函數的參數,expression 是該函數的返回值。
-lambda 函數的特點是它不需要名稱(即匿名),並且只能包含單個表達式。
-在這個上下文中,key 是用於指定一個函數的參數。這個函數會被應用到可迭代對象的每個元素上,以決定如何進行比較。
-lambda x: x[1] 則表示這個函數接收一個參數 x,並返回 x 的第二個元素(即索引為 1 的元素)。因此,這裡 x 通常是一個可迭代對象中的單個元素,比如元組、列表等。
tuples = [(1, 2), (3, 1), (2, 3)]
max_tuple = max(tuples, key=lambda x: x[1]) # 返回 (2, 3)
每個元組包含兩個元素,索引分別為 0 和 1:
第一個元組 (1, 2) 的第一個元素是 1,第二個元素是 2。
第二個元組 (3, 1) 的第一個元素是 3,第二個元素是 1。
第三個元組 (2, 3) 的第一個元素是 2,第二個元素是 3。
然後,max() 函數會根據這些提取的值來找出最大的:
比較 2、1 和 3,顯然 3 是最大的。
因此,max(tuples, key=lambda x: x[1]) 返回的結果是 (2, 3),因為該元組的第二個元素 3 是所有元組中最大的。
set1 ={1,2,3} set2={3,4,5}
操作 | 描述 | 範例 |
---|---|---|
聯集union() or (set1 | set2) |
返回兩個集合的聯集(所有元素的集合) | set1.union(set2)->{1,2,3,3,4,5} print(set1|set2)->{1,2,3,3,4,5} |
交集intersection() or set1&set2 |
返回兩個集合的重複/共同的元素 | set1.intersection(set2)->{3} print(set1&set2)->{3} |
反差集(set1^set2) |
取不重複值(扣除重複) | print(set1^set2)->{1,2,4,5} |
差集difference() or (set1-set2) |
返回存在於第一個集合但不存在於第二個集合的元素 | set1.difference(set2)->{1,2} print(set1-set2)->{1,2} |
子集issubset() |
如果set1所有元素都存在於另一個set2集合中則返回 True,否則返回 False | set1 = {1, 2} set2 = {1, 2, 3, 4} result = set1.issubset(set2) # True |
超集:issuperset() |
如果set2集合的所有元素都存在set1集合中,則返回 True,否則返回 False。 | set1 = {1, 2, 3, 4} set2 = {1, 2} print(result)set1.issuperset(set2) # True |