在 Python 中建立有序集合
本教程將討論 Python 中的 OrderedSet
類。
使用 Python 中的 OrderedSet
類建立有序集
首先,讓我們先定義集合在 Python 中的含義。它是一個明確定義的不同物件的集合,這些物件以某種方式相關。這個定義不包含任何順序。因此,根據定義,集合中沒有順序。
但是,如果出現這種情況,我們必須保留集合元素的原始順序,我們可以使用 OrderedSet
類。要使用 OrderedSet
類,我們必須首先使用 Python 包管理器在我們的裝置上安裝 ordered-set
包。下面給出了安裝 ordered-set
包的命令。
pip install ordered-set
現在,我們可以建立一個集合來保留每個集合元素的順序。下面的程式演示了這個過程。
from ordered_set import OrderedSet
setABC = OrderedSet(["A", "B", "C"])
print(setABC)
輸出:
OrderedSet(['A', 'B', 'C'])
我們建立了一個有序集合,並使用上面程式碼中的 OrderedSet
類按順序顯示每個索引處的值。這個 OrderedSet
是一個可變資料結構,它是列表和集合資料結構的混合體。所以,我們必須用一個列表來初始化這個集合;這樣,集合會保留每個元素的索引。
為了簡化索引,add()
函式返回新增到集合中的新元素的索引;這在下面的以下過程中顯示。
print(setABC.add("D"))
輸出:
3
我們向 setABC
新增了另一個元素,並在上面的程式碼中顯示了 add()
函式返回的值。我們還可以使用 index()
函式獲取特定元素的索引;這顯示在以下程式碼片段中。
print(setABC.index("C"))
輸出:
2
我們使用上面程式碼中的 index()
函式檢索了 setABC
集合中元素 C
的索引。我們還可以分別使用 |
、&
和 -
運算子對這些有序集合執行集合的通常操作,例如並集、交集和差集。
下面的程式碼示例演示瞭如何對有序集合執行聯合。
from ordered_set import OrderedSet
setABC = OrderedSet(["A", "B", "C", "D"])
setDEF = OrderedSet(["D", "E", "F", "G"])
solutionSet = setABC | setDEF
print(solutionSet)
輸出:
OrderedSet(['A', 'B', 'C', 'D', 'E', 'F', 'G'])
我們使用聯合運算子 |
計算了集合 setABC
和 setDEF
的並集在上面的程式碼中。下面的程式向我們展示瞭如何在有序集上執行交集。
from ordered_set import OrderedSet
setABC = OrderedSet(["A", "B", "C", "D"])
setDEF = OrderedSet(["D", "E", "F", "G"])
solutionSet = setABC & setDEF
print(solutionSet)
輸出:
OrderedSet(['D'])
我們用上面程式碼中的交集運算子 &
計算了集合 setABC
和 setDEF
的交集。下面的程式碼示例向我們展示瞭如何計算兩個有序集合之間的差異。
from ordered_set import OrderedSet
setABC = OrderedSet(["A", "B", "C", "D"])
setDEF = OrderedSet(["D", "E", "F", "G"])
solutionSet = setABC - setDEF
print(solutionSet)
輸出:
OrderedSet(['A', 'B', 'C'])
我們在上面的程式碼中使用差分運算子 -
計算了集合 setABC
和 setDEF
的差異。
預設情況下,Python 不支援有序集。不過,我們可以安裝一個外部包,ordered-set
,它為我們提供了建立有序集的功能。Python 2.6 及更高版本支援此過程。
這些有序集合是 Python 中原始列表和集合的混合體。所以,我們必須用一個列表來初始化這些集合。這些新集合為我們提供了集合的所有常用功能,例如並集、交集和差集。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn