Python基础入门:高效的集合操作
Python中有兩種可以遍歷的容器類型。
- 序列類型:包含字符串、列表、元祖
- 映射(哈希)類型:包含字典、集合
序列類型是線性表,就像數組一樣,是在內存中開辟一塊連續空間,連續存儲的,那么查找某個元素時就需要從頭開始租個對比,因此序列的查詢效率是O(n),即一個長度為n的序列查詢一個變量是否在其中一般需要n次操作。
映射類型是散列表,是基于哈希(Hash)算法的,變量在映射中的存儲位置是通過計算得出來的,存取時,通過Hash計算出其應該存放的位置,存入,查找時,通過Hash計算其存放的位置,取出,因此映射類型的查詢效率是O(1),即無論數據量多大,查詢永遠只需要一次操作。
在Hash算法中,不同的變量計算出的位置是唯一的,而為了同一個變量每次計算出的位置不變,就要求變量是不可變的類型。
在Python中不可變的類型包括:None、數字(整型、浮點型、布爾型)、字符串、元祖,即可哈希的。而列表、字典、集合這些容器類型,長度是不固定的,因此是不可哈希的,即不可作為Hash的鍵。
Python的字典是一種非常典型的Hash類型(Java中稱為HashMap),即由定長的key計算出地址存放value。因此字典的key支持None、數字(整型、浮點型、布爾型)、字符串、元祖。
以下都是合法的字典。
當我們只需要存儲key不需要value時就得到一個集合類型,如
s = {'hello', 'hi', 'how are you'} print(type(s))打印出來是集合set類型。
注意:創建空集合不能用s = {},這樣s是字典類型,空集合應使用s = set()創建。
身為一種哈希類型,集合中的元素同樣要求是定長的,即可哈希的,支持None、數字(整型、浮點型、布爾型)、字符串、元祖幾種類型,同時集合中的元素不可重復。
在日常使用中,相對于列表、字典來說集合的出鏡率不高,然而通過集合可以高效的完成一些操作,如。
1.列表去重(注意會改變原有順序)
l = [3,2,1,5,6,3,2,6,1,4] l2 = list(set(l))轉為集合是會自動去重并排序,在轉回列表得到[1, 2, 3, 4, 5, 6]。
2. 交集、并集、差集
這就是我們中學學的集合運算,在兩組數據對比時是非常有效的,比如我們有兩組數據。
如何快速找出兩者的差異呢?
# 轉為集合 s1 = set(l1) s2 = set(l2)# 并集:兩者中全部的,并去重 all = list(s1 | s2) # 得到 ['niudun', 'sofa', 'sofia', 'zhangsan', 'wangwu', 'lisi', 'lily', 'eric', 'kevin']# 交集:兩者重復的部分 same = list(s1 & s2) # 得到 ['lisi', 'sofia']# 差集:l1中有l2沒有的 diff = list(s1 - s2) # 得到 ['lily', 'eric', 'kevin', 'niudun'], 也可以`s2-s1`得到l2中有l1中沒有的同樣,字典的.keys()得到的字典的所有鍵值是一種類似集合的類型,當字典每一個value值不包含可變類型(即沒有嵌套列表、字典)時,字典的.items()方法同樣支持集合操作。
d1 = {'name': 'kevin', 'age': 14, 'gender': 'male', 'class': 15, 'grade': 9, 'chinese': 94, 'math': 63, 'english': 82} d2 = {'english': 82, 'age': 14, 'class': 15, 'chinese':94,'name': 'kevin', 'gender': 1, 'zhengzhi': 79, 'grade': 9}假設我們要對比兩組數據的不同
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # d1中有d2中沒有的key d1.keys() - d2.keys() # 得到 {'math'}# d2中有的d1中沒有的key d2.keys() - d1.keys() # 得到 {'zhengzhi'}# d1中和d2中不同的項目 ```python d1.items() - d2.items() # {('math', 63), ('gender', 'male')} d2.items() - d1.items() # {('zhengzhi', 79), ('gender', 1)}使用.items()做集合操作時要求字典無嵌套列表、字典等可變類型
總結
以上是生活随笔為你收集整理的Python基础入门:高效的集合操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基础入门:内置函数之排列组合
- 下一篇: Python中常用的文本转义及编码