日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python基础入门:高效的集合操作

發布時間:2025/3/20 python 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python基础入门:高效的集合操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python中有兩種可以遍歷的容器類型。

  • 序列類型:包含字符串、列表、元祖
  • 映射(哈希)類型:包含字典、集合

序列類型是線性表,就像數組一樣,是在內存中開辟一塊連續空間,連續存儲的,那么查找某個元素時就需要從頭開始租個對比,因此序列的查詢效率是O(n),即一個長度為n的序列查詢一個變量是否在其中一般需要n次操作。

映射類型是散列表,是基于哈希(Hash)算法的,變量在映射中的存儲位置是通過計算得出來的,存取時,通過Hash計算出其應該存放的位置,存入,查找時,通過Hash計算其存放的位置,取出,因此映射類型的查詢效率是O(1),即無論數據量多大,查詢永遠只需要一次操作。

在Hash算法中,不同的變量計算出的位置是唯一的,而為了同一個變量每次計算出的位置不變,就要求變量是不可變的類型。

在Python中不可變的類型包括:None、數字(整型、浮點型、布爾型)、字符串、元祖,即可哈希的。而列表、字典、集合這些容器類型,長度是不固定的,因此是不可哈希的,即不可作為Hash的鍵。

Python的字典是一種非常典型的Hash類型(Java中稱為HashMap),即由定長的key計算出地址存放value。因此字典的key支持None、數字(整型、浮點型、布爾型)、字符串、元祖。
以下都是合法的字典。

{'name': 'kevin', 'age': 12, 'skills': ['python', 'java']} {1: 'kevin', 2: 'eric'} {True: 1, False: 0, None: -1} {('kevin', 'cn'): {'name': 'keviin', 'age': 12}}

當我們只需要存儲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. 交集、并集、差集
這就是我們中學學的集合運算,在兩組數據對比時是非常有效的,比如我們有兩組數據。

l1 = ['kevin', 'eric', 'lily', 'niudun', 'sofia', 'lisi'] l2 = ['sofa', 'sofia', 'zhangsan', 'wangwu', 'lisi']

如何快速找出兩者的差異呢?

# 轉為集合 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基础入门:高效的集合操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。