Python學習筆記3:元組和集合

Python學習筆記3:元組和集合

元組

存在乎義

元組的定義爲不可變動的有序對象集合,和列表只有一個區別:不可改變。也就是說元組聲明後是不能改變其內容的。python

這有意義嗎?列表不是已經很好用了嘛。不,這真的頗有意義。數組

咱們回想如下Java或者PHP,在實際使用中是否是會聲明大量的const值,好比錯誤代碼,或者描述性文字之類的直接寫入代碼的硬編碼部分。這些內容都是一旦聲明你就不但願其它程序有意或者無心地去改寫。數據結構

但這些在Python中是沒法實現的,由於Python並不支持const,而元組就是一種代替品。性能

《Head first Python》一書指出元組的性能是遠優於列表的,Python解釋器在這方面有針對性優化。固然這點是很容易理解的,畢竟對於一個兼顧數組和鏈表,功能相對複雜的容器,一個不可變的簡單數據結構天然在某些性能上會賽過。但這裏仍是有不少東西能夠細細琢磨,好比空間複雜度列表顯而易見的要高出,但在讀取方面,元組的時間複雜度是真的能優於列表?它是怎麼作到的?學習

建立

直接聲明

要直接聲明一個元組能夠這樣:優化

a = ("a","b","c")
print(a)

輸出編碼

('a', 'b', 'c')code

這很容易,和列表的惟一區別就是把中括號換成了小括號。對象

但有一種特例須要特別說明,若是你要聲明的元組中只包含一個元素,那你不能寫成('a'),而是要寫成('a',),緣由也很明顯,對於前者,Python解釋器會認爲()是優先級運算符,而非元組聲明,只有加入一個逗號才能確實指明這裏是元組聲明。rem

類型轉換

類型轉換也很好理解,既然元組就是不能改變的列表,那固然能夠直接由列表轉換成元組,固然字符串什麼的也是能夠的:

a = tuple(["a","b","c"])
print(a)

輸出

('a', 'b', 'c')

集合

集合的定義是無序且具備惟一性的對象容器。這裏集合這個概念其實就是中學數學裏的集合,二者徹底一致。它具備兩個特性:

  • 無序:這點和字典同樣。
  • 惟一性:集合的元素在集合中都是惟一的,不能重複。

建立

直接聲明

a = {"a","b","c"}
print(a)

輸出

{'a', 'b', 'c'}

集合的聲明很簡單,同字典相似,使用大括號,區別就是集合中沒有鍵值對。

類型轉換

和其它經常使用容器同樣,集合也能夠經過類型鑽換建立:

a = set("aabbccddee")
print(a)

輸出

{'a', 'c', 'd', 'e', 'b'}

能夠看到轉換前的字符串是有重複字符的,但集合的特性決定了轉換後必然是去重的。

集合運算

前面說過了,集合是一個數學上的概念,天然也支持數學上的集合運算,即交集,並集和補集。

a = set("abcde")
b = set("be12345gw")
c = a.intersection(b)
print(a)
print(b)
print(c)

輸出

{'b', 'a', 'e', 'c', 'd'}
{'2', '3', 'b', '4', 'w', '5', 'e', '1', 'g'}
{'b', 'e'}

能夠看出,交集就是求兩個集合重複的元素集。

a = set("abcde")
b = set("be12345gw")
c = a.union(b)
print(a)
print(b)
print(c)

輸出

{'b', 'c', 'e', 'a', 'd'}
{'5', '3', 'b', 'g', '1', '4', '2', 'e', 'w'}
{'w', '5', '3', 'b', 'g', 'c', '1', '4', '2', 'e', 'a', 'd'}

並集也很好理解,就是兩個集合的全部元素加起來,再去重。

補集也有叫差集,定義爲b在a中的補集即a中的元素減去a和b的交集。對應的代碼示例以下:

a = set("abcde")
b = set("be12345gw")
c = a.difference(b)
print(a)
print(b)
print(c)

輸出

{'b', 'c', 'd', 'a', 'e'}
{'4', '2', 'e', '1', '5', '3', 'w', 'b', 'g'}
{'a', 'd', 'c'}

若是要求a在b中的補集那就是反過來b.difference(a)

若是想和我同樣複習一下集合的數學概念的,能夠閱讀百度百科

存在乎義

集合在某些狀況下極爲有用,好比要對比兩個字符串,求它們中重複的字符,在這種狀況下將其轉換爲兩個集合再求交集便可。

這裏再也不一一舉例,對於各類容器,只有常常思考,使用中對比其各自優缺點,才能真正運用自如。

增刪改查

對集合的增刪改查相對簡單,這裏簡單介紹一下:

a = set("abcde")
#追加元素
a.add("f")
print(a)
#刪除元素
a.remove("a")
print(a)

輸出

{'f', 'b', 'e', 'c', 'a', 'd'} {'f', 'b', 'e', 'c', 'd'}

相關文章
相關標籤/搜索