專項練習 · 7 分鐘閱讀

Python 元組與集合練習:固定記錄與唯一值

元組和集合解決兩類不同的問題:儲存固定記錄,以及只保留唯一值。練習在它們之間做選擇,而不是預設使用列表。

把記錄解包成變數

元組適合小的固定記錄。解包會給每個欄位一個名字,讓下一行讀起來像一句話。左邊的變數數量必須和值數量一致。

item = ("latte", 4.5)
name, price = item
print(f"{name}: ${price:.2f}")

有名字的記錄

把元組當作不可變物件

不能對元組呼叫 append,也不能替換某個位置。值變化時建立新元組。這種限制在記錄不應該被意外修改時很有用。

point = (3, 5)
shifted = (point[0] + 1, point[1] + 1)
print(shifted)

建立新元組

去重但不保留順序

set(values) 會為每個值保留一份。用 len(set(values)) 統計不同項。如果需要保留原順序,單靠集合不夠;可以一邊走訪一邊維護 seen 集合和新列表。

orders = ["latte", "tea", "latte", "mocha"]
unique = set(orders)
print(len(unique))

統計不同值

成員判斷與集合運算

用 in 做成員判斷,快速且易讀。交集和併集回答「重疊部分」和「合併後的值」。需要穩定顯示時,列印前先排序。

a = {"latte", "tea"}
b = {"tea", "mocha"}
print(sorted(a & b))
print(sorted(a | b))

重疊與併集

有意識地選擇集合型別

順序和重複項重要時用列表;固定記錄用元組;唯一性或成員判斷用集合。先說清楚要回答的問題,選擇通常就很明顯。

orders = ["latte", "tea", "latte"]
print(orders[0])
print(len(set(orders)))

位置與唯一性

你的練習清單

常見問題

元組裡可以放列表嗎?

可以。元組本身不可變,但裡面的可變物件仍然可以改變。通常這意味著資料建模方式需要再考慮。

為什麼集合的順序每次不同?

集合是無序集合。不要依賴它的顯示順序;需要順序時排序,或建構一個有序列表。

怎樣去重又保留順序?

走訪原列表,用 seen 集合記錄見過的值,只有沒見過的值才追加到結果列表。

練習元組與集合

12 道題,覆蓋解包、去重、成員判斷和集合運算。

打開練習

繼續閱讀: