Python集合


在數學上,集合(Set)是不以任何特定順序的資料項。 Python集合與此數學定義類似,但有以下附加條件。

  • 集合中的元素不能重複。
  • 集合中的元素是不可變的(不能被修改),但集合作為一個整體是可變的。
  • 附加到python集合中的任何元素不需要索引。所以集合不支援任何索引或切片操作。

集合操作

python中的集合通常用於像聯合,相交,異同和補充等數學運算。下面建立一個集合,存取它的元素並執行這些數學運算。參考以下範例程式碼 -

建立一個集合

通過使用set()函式或將所有元素放置在一對大括號內建立一個集合。

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])
Months={"Jan","Feb","Mar"}
Dates={21,22,17}
print(Days)
print(Months)
print(Dates)

當上面的程式碼執行時,它會產生以下結果。 請注意結果中元素的順序如何變化。

{'Wed', 'Fri', 'Tue', 'Mon', 'Thu', 'Sun', 'Sat'}
{'Feb', 'Mar', 'Jan'}
{17, 21, 22}

存取集合中的值

我們無法存取集合中的單個值。只能如上所示存取所有元素。 但是也可以通過遍歷該集合來獲取單個元素的列表。

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])

for d in Days:
    print(d)

當執行上面範例程式碼時,得到以下結果 -

Wed
Sun
Fri
Tue
Mon
Thu
Sat

將專案新增到集合

可以使用add()方法將元素新增到集合中。附加到新新增的元素不需要指定索引。

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat"])

Days.add("Sun")
print(Days)

當上面的程式碼執行時,它會產生以下結果 -

{'Wed', 'Sat', 'Thu', 'Mon', 'Sun', 'Tue', 'Fri'}

從集合中刪除專案

可以使用discard()方法從集合中刪除元素。參考以下程式碼實現 -

Days=set(["Mon","Tue","Wed","Thu","Fri","Sat"])

Days.discard("Sun")
print(Days)

執行上面範例程式碼,得到以下結果 -

{'Tue', 'Fri', 'Wed', 'Sat', 'Thu', 'Mon'}

集合的聯合操作

兩個集合上的聯合操作產生一個包含來自兩個集合的所有不同元素的新集合。 在下面的例子中,元素"Wed"出現在兩個集合中。

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Wed","Thu","Fri","Sat","Sun"])
AllDays = DaysA|DaysB
print(AllDays)

執行上面範例程式碼,得到以下結果 -

{'Mon', 'Sun', 'Thu', 'Tue', 'Wed', 'Fri', 'Sat'}

集合的交集

兩個集合上的交集操作產生一個新的集合,其中只包含來自兩個集合的共同元素。 在下面的例子中,元素"Wed"出現在兩個集合中。

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Wed","Thu","Fri","Sat","Sun"])
AllDays = DaysA & DaysB
print(AllDays)

執行上面範例程式碼,得到以下結果 -

{'Wed'}

集合的差集

對兩組進行差異化操作會產生一個新的集合,其中只包含來自第一集合的元素,而不包含第二集合中的元素。 在下面的例子中,元素Wed出現在兩個集合中,所以它不會在結果集中找到。

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Wed","Thu","Fri","Sat","Sun"])
AllDays = DaysA - DaysB
print(AllDays)

執行上面範例程式碼,得到以下結果 -

{'Mon', 'Tue'}

比較集合

可以檢查一個給定的集合是否是另一個集合的子集或超集。 結果是TrueFalse,取決於組中存在的元素。

DaysA = set(["Mon","Tue","Wed"])
DaysB = set(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])
SubsetRes = DaysA <= DaysB
SupersetRes = DaysB >= DaysA
print(SubsetRes)
print(SupersetRes)

執行上面範例程式碼,得到以下結果 -

True
True