一文帶你手撕Python之散列類型
1.字典
思考:如果有多個數(shù)據(jù),例如:“凱子”,“男”,19,如何快速存儲這些數(shù)據(jù)
多數(shù)我們是通過列表進行存儲的
li=['凱子','男',19]
在定義完這個列表之后我們?nèi)绾蝸碚业綌?shù)據(jù)'凱子'呢?
我們可以通過索引
print(li[0])
如果將來數(shù)據(jù)順序發(fā)生改變的話,還能用索引值進行訪問嗎
答案是不能的
數(shù)據(jù)順序發(fā)生變化,每個數(shù)據(jù)的下標也隨之變化,如何保證數(shù)據(jù)順序變化前后能使用同一種方法查找數(shù)據(jù)呢?
那么這里就涉及到了字典
字典的定義
定義:{‘鍵’:'值',‘鍵’:'值'}
1.字典的數(shù)據(jù),都是以鍵值對的方式----鍵和值都要成對出現(xiàn)
2.鍵值對之間用逗號隔開
字典的定義:
d={'name':'凱子','age':19,'sex':'男'} print(d) #{'name': '凱子', 'age': 19, 'sex': '男'} print(type(d)) #<class 'dict'>
獲取字典內(nèi)值的方式:字典[鍵]
#上面已經(jīng)將字典定義好了,但是我們現(xiàn)在怎么進行拿值的操作呢? #獲取值---字典[鍵]: #序列類型是有順序的,散列類型是沒有順序的 #字典也是沒有順序的,如果想訪問值的話,我們是需要通過鍵進行獲取的 print(d['name']) #凱子 #我們將順序進行改變的話我們?nèi)匀荒苓M行訪問
序列類型是有順序的,散列類型是沒有順序的
字典也是沒有順序的,如果想訪問值的話,我們是需要通過鍵進行獲取的
在字典之內(nèi)不管順序怎么變我們都能通過鍵進行訪問
字典注意事項
鍵必須是唯一的
#鍵必須是唯一的 d={'name': '凱子', 'age': 19, 'sex': '男',"name":"小明"} print(d) #{'name': '小明', 'age': 19, 'sex': '男'} #之前定義的凱子就被這個小明給替換掉了 #如果在字典里面出現(xiàn)重復的鍵,那么前面的鍵值對會被后面的鍵值對給替換掉 ''' 因為我們之前就說明了 在字典中對數(shù)值的訪問我們只能通過鍵 那么現(xiàn)在有兩個一樣的鍵,那么我們是不知道訪問誰的 所以在字典中鍵必須是唯一的 如果同時出現(xiàn)一樣的鍵,那么前面的鍵值對會被后面鍵值對提壞 如果確實要定義兩個名字的話,我們可以在name后面加上數(shù)字進行區(qū)分 '''
如果在字典里面出現(xiàn)重復的鍵,那么前面的鍵值對會被后面的鍵值對給替換掉
最好的解決方法就是在鍵后面加上數(shù)字進行區(qū)分
鍵值對必須成對出現(xiàn),不然就會報錯
字典中的鍵,只能是不可以修改的類型(字符串、元組、數(shù)字)
所以我們是不能用列表作為鍵
字典的操作方式---增刪改查
1.獲取值---字典[鍵]:獲取對應鍵的值
#獲取小明這個值 #字典[鍵] print(d['name'])
2.修改值---字典[鍵]=新值
d={'name':'凱子','age':19,'sex':'男'} d['name']="小紅" print(d) #{'name': '小紅', 'age': 19, 'sex': '男'}
3.添加鍵值對---字典[新鍵]=新值
d['name3']='小蘭' print(d) #{'name': '小紅', 'age': 19, 'sex': '男', 'name3': '小蘭'}
字典[鍵]=新值
對于這個,鍵存在,那么就是對這個鍵指向的值進行修改
如果不存在的話,就是新添加一個新的鍵以及這個鍵指向的新值
4.獲取字典中的值的方式
1.1字典[鍵]:獲取對應鍵的值
1.2字典.get(鍵,鍵不存在的提示)
print(d.get('name')) #小紅 print(d.get('age')) #19 print(d.get('age1')) #None ''' 這種方式就會進行一個提示,如果我們輸入的鍵是不存在的話 那么就會提示我們None,說明字典里面并沒有這個鍵 ''' #除此之外,我們是可以自己設置這個提示,提醒我們這個鍵不存在 print(d.get('age1','鍵不存在')) #鍵不存在
我們可以在這個get函數(shù)進行鍵對應值的查找,并且我們還能判斷鍵是否存在
可以對鍵不存在的信息進行設置
5.setdefault(鍵,值)---鍵存在,返回對應的值
鍵不存在就會將鍵值對進行添加
d={'name':'凱子','age':19,'sex':'男'} print(d.setdefault('name5','kk')) print(d) #{'name': '凱子', 'age': 19, 'sex': '男', 'name5': 'kk'} #這里的name5就是不存在的鍵 #通過這種方法我們直接將這個鍵放到字典中 print(d.setdefault('name5','55')) print(d) #{'name': '凱子', 'age': 19, 'sex': '男', 'name5': 'kk'} #r如果我們輸入的鍵是存在的話,那么我們就不進行額外的操作了
如果我們輸入的鍵是存在的話,那么我們就不進行額外的操作了
如果我們輸入的鍵是不存在的話,那么我們就在這個字典中添加這個鍵以及這個鍵對應的值
但是如果存在的話,我們是不進行額外的操作的
我們僅僅只需要進行鍵對應的值的打印
setdefault返回的一般是鍵對應的值
字典.setdefault(鍵,’數(shù)據(jù)‘)
小回顧:
#當前字典里面有三對鍵值對 #鍵和值之間的分割符是冒號 #鍵值對之間的分隔符是逗號 #用花括號將所有的鍵值對進行包裹 d={'name':"小明",'age':18,'sex':'男'} #獲取小明這個值 #字典[鍵] print(d['name']) #修改值---字典[鍵]=新值 d['name']="小紅" print(d) #添加值--字典[新鍵]=新值 d['name1']="小工" print(d) #這個name1這個鍵是之前沒出現(xiàn)過的 #所以編譯器會將這個鍵和其對應的值會作為鍵值對添加到字典中 print(d.get('name')) #小紅 #如果不存在我們想尋找的鍵值對的話,那么編譯器會通過這個函數(shù)將這個鍵值對添加到字典之中 print(d.setdefault('name5',"kaizi")) print(d) print(d.setdefault('name')) #如果這個鍵存在的話,那么setdefault就會返回這個鍵對應的值
6.update()---添加多個鍵值對
字典.update(字典)
update添加多個鍵值對的使用方法:
#{'name': '小紅', 'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi'} #在原有的字典中添加鍵值對 d.update({'name2':"小李",'age2':'15'}) print(d) ''' {'name': '小紅', 'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi', 'name2': '小李', 'age2': '15'} ''' #這個就是在update的括號內(nèi)添加一個字典
7.pop(鍵)---刪除指定的鍵值對
#{'name': '小紅', 'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi'} #刪除小紅 d.pop('name') print(d) ''' {'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi', 'name2': '小李', 'age2': '15'} ''' #在列表中對元素進行刪除的時候使用pop我們在括號內(nèi)不輸入元素的索引值 #那么默認就是刪除最后一個元素 #但是現(xiàn)在我們這里的字典的話使用刪除的方法的時候我們一定要在括號內(nèi)加上要刪除的鍵值對的鍵
在列表中對元素進行刪除的時候使用pop我們在括號內(nèi)不輸入元素的索引值
那么默認就是刪除最后一個元素
但是現(xiàn)在我們這里的字典的話使用刪除的方法的時候我們一定要在括號內(nèi)加上要刪除的鍵值對的鍵
pop的內(nèi)容里面必須要有內(nèi)容,沒有內(nèi)容的話就是會報錯的
8.poptiem()---刪除最后一個鍵值對
d.popitem() print(d) #{'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi', 'name2': '小李'} d.popitem() print(d) #{'age': 18, 'sex': '男', 'name1': '小工', 'name5': 'kaizi'} #返回關鍵字和值構成的元組 print(d.popitem()) #('name5', 'kaizi') print(d) #{'age': 18, 'sex': '男', 'name1': '小工'} print(d.popitem()) #('name1', '小工') #返回的值就是要刪除的鍵值對組成的元組
#返回關鍵字和值構成的元組 print(d.popitem()) #('name5', 'kaizi') print(d) #{'age': 18, 'sex': '男', 'name1': '小工'} print(d.popitem()) #('name1', '小工') #返回的值就是要刪除的鍵值對組成的元組
9.values()獲取字典中所有的值
字典.values()
d={'name':"小明",'age':18,'sex':'男',"name1":"小紅"} print(d.values()) #dict_values(['小明', 18, '男', '小紅'])
for i in d.values(): print(i) ''' 小明 18 男 小紅 對于這個循環(huán)的寫法,我們編譯器會先執(zhí)行這個d.values的方法, print(d.values()) #dict_values(['小明', 18, '男', '小紅']) 獲取到字典中的值 這些值都被存在一個列表中 然后我們i遍歷這個列表打印每一個值 '''
我們將d.values寫到for循環(huán)的條件中
我們先進行d.values的編譯,然后生成了一個列表,這個列表里面存著的就是這個字典里面的數(shù)據(jù)
然后i進行這個列表的遍歷,然后進行數(shù)據(jù)的打印
10.keys()---獲取字典中所有的鍵
d={'name':"小明",'age':18,'sex':'男',"name1":"小紅"} print(d.keys()) #dict_keys(['name', 'age', 'sex', 'name1']) #同樣,獲取的鍵也會存在列表中 #那么我們也可以同樣利用for循環(huán)遍歷這個鏈表進行鍵的打印 for i in d.keys(): print(i) ''' name age sex name1 '''
將獲取的鍵存在列表中,利用for循環(huán)進行遍歷列表,打印每一個鍵
11.items()---獲取字典中所有的鍵值對
#利用items就能獲取這個字典內(nèi)的鍵值對,得到的鍵值對會被存在列表中 #每一個鍵值對在列表中存在的元素是元組形式的 d={'name':"小明",'age':18,'sex':'男',"name1":"小紅"} print(d.items()) ''' dict_items([('name', '小明'), ('age', 18), ('sex', '男'), ('name1', '小紅')]) ''' #我們從這個存儲鍵值對的列表中進行遍歷,打印每一個鍵值對 for i in d.items(): print(i) ''' ('name', '小明') ('age', 18) ('sex', '男') ('name1', '小紅') '''
用鍵:值這個格式將字典內(nèi)的鍵值對表示出來
因為我們使用items獲取到的鍵值對是以元組形式存進這個列表的
那么我們隨著i的變化就能進行列表中所有鍵值對的訪問,也就是對元組的訪問
那么我們是可以通過索引值訪問元組內(nèi)的元素的
這個元組內(nèi)的元素下標為0就是鍵,1就是鍵指向的數(shù)據(jù)
那么我們就可以利用循環(huán)將這個格式進行輸出
利用索引值將鍵值隊的格式表現(xiàn)出來:
#鍵值對存在列表中 #對于這個循環(huán)來說,i存放的數(shù)據(jù)是鍵值對的數(shù)據(jù),鍵值對輸出的格式是---鍵:值 #因為鍵值對存在列表中,所以我們是可以用下標進行訪問的 d={'name':"小明",'age':18,'sex':'男',"name1":"小紅"} print(d.items()) #dict_items([('name', '小明'), ('age', 18), ('sex', '男'), ('name1', '小紅')]) for i in d.items(): #print(i) #通過索引的方式將鍵和值單獨的獲取 #鍵值對在這個列表中存在的形式是元組 #通過i的變化,我們訪問每一個鍵值對 #那么我們就可以用i+索引進行元組內(nèi)元素的訪問的操作了 print(i[0])#訪問的是鍵 print(i[1])#訪問的是值 print(f'{i[0]}:{i[1]}') ''' 那么我們通過循環(huán)就打印出這么個樣子 name:小明 age:18 sex:男 name1:小紅 和我們預期的是一樣的 '''
除了使用索引,我們還能使用拆包的方法
回顧一下什么事拆包
元組可以同時賦值給多個變量,只要變量個數(shù)不超過元組長度,變量前面加上* 號則可以將多于元素都接受,并組成一個列表
d={'name':"小明",'age':18,'sex':'男',"name1":"小紅"} print(d.items()) #dict_items([('name', '小明'), ('age', 18), ('sex', '男'), ('name1', '小紅')]) for i in d.items(): a,b=i ## print(a) ## print(b) print(f'{a}:') ''' 隨著i的遍歷,每次都指向著不同的元組,就是指向不同的鍵值對 那么所以說i種存在兩個值,就是鍵和鍵指向的值 那么我們就利用元組的拆包的操作 將鍵值對這兩個值存在我們創(chuàng)建的兩個變量中 a就是存儲鍵 b就是存儲值了 那么我們利用循環(huán),i遍歷整個列表我們將整個列表中的元素都進行打印了 ''' #兩種方法都能實現(xiàn)我們想要的效果 ''' name:小明 age:18 sex:男 name1:小紅 '''
2.集合
集合的概念以及定義(包括空集合)
集合的定義:{元素1,元素2…….}
i={1,5,6} print(type(i)) #<class 'set'>
那么空集合該怎么進行使用呢?
如果我們光寫一個花括號的話,那么這個是不是就能表示空集合呢?
答案是不能的
q={} print(type(q)) #<class 'dict'>
最后打印出來的類型是一個字典
所以說一個空的花括號表示的是字典
其實空集合的創(chuàng)建是set()
o=set() print(type(o)) #<class 'set'>
所以set就是集合的表示方式
創(chuàng)建空集合一定要使用set()
集合的特點
1.集合是和字典是一樣的,元素是沒有順序的
所以我們在打印集合的時候打印出來的數(shù)據(jù)的順序都是隨機的
2.集合內(nèi)的元素都是唯一的
如果我們在定義集合元素的時候有多個相同的元素的話,那么我們在打印的時候指只會保留一個
j={1,2,3,'hu',5,6,1,5} print(j) #{1, 2, 3, 5, 6, 'hu'}
所以集合是無序不重復的散列
集合的操作
1.去重:利用集合的特點---元素是唯一的
#對列表進行去重的操作 li=[12,56,89,56,16] #將列表轉(zhuǎn)換為集合的類型 j2=set(li) print(j2) #{56, 89, 12, 16} #然后將集合轉(zhuǎn)換為列表,然后這個列表就完成了去重的操作了 li=list(j2) print(li)
如果一個列表需要進行去重的話,我們就可以將這個列表轉(zhuǎn)換為集合然后進行去重的操作
2.修改
對于集合的話我們是沒有直接的修改的操作的
我們只能先刪除再添加
3.添加
#### 3.1 add(元素)---添加元素到集合中
我們說加什么add就加什么,不會做額外的操作
#添加操作 j={1,2,3,'hu',5,6,1,5} j.add("你好啊") print(j) #{1, 2, 3, 'hu', 5, 6, '你好啊'}
#### 3.2 upodate(序列/散列)
這個函數(shù)會將我們輸入的要添加的序列或者是散列給拆分了
#添加序列的話 #update(序列/散列) j.update("你好") print(j) #{1, 2, 3, 5, 6, 'hu', '你', '好', '你好啊'} #可以發(fā)現(xiàn)我們后面輸入的被拆開了 #將我們輸入的序列或者是散列類型的數(shù)據(jù)拆開放到集合中
括號內(nèi)是不能夠?qū)憯?shù)字的,會報錯,因為括號內(nèi)只能寫序列和散列
4.刪除
#### 4.1remove(指定元素)
我們是需要指定值進行操作的
j={1,2,3,'hu',5,6,1,5} j.remove("hu") print(j) #{1, 2, 3, 5, 6} j.remove(5) print(j) #{1, 2, 3, 6}
#### 4.2pop()---刪除隨機元素
之所以刪除隨機元素,因為數(shù)據(jù)的位置都是隨意變動的
#{1, 2, 3, 6} j.pop() print(j) #{2, 3, 6}
5.交集、并集
只有集合里面存在這個概念
#### 5.1交集----- &
取出兩個集合中相同的內(nèi)容
a={1,2,3,4} b={3,4,5,6} print(a&b) #{3, 4}
#### 5.2并集----- |
兩個集合合并在一起
a={1,2,3,4} b={3,4,5,6} print(a|b) #{1, 2, 3, 4, 5, 6}
集合中每個數(shù)據(jù)都是唯一的
那么出現(xiàn)的兩個3和兩個4最后都只保留了一個
要遵循集合的規(guī)則
至此,我們的數(shù)據(jù)類型就學完了
運算符的優(yōu)先級
賦值元素符就是左右兩邊的內(nèi)容進行指定的算術運算再將結果賦值給左邊的變量
成員運算符
成員運算符有兩個:in not in
成員運算符在序列和散列居多
主要是判斷某個內(nèi)容在這一堆是否存在
使用格式:數(shù)據(jù) in 序列/散列
判斷數(shù)據(jù)是不是序列/散列的成員
成員運算符的使用
#判斷字符p是不是python的成員 print('p'in'pyhton') #True li=['李四''張三''王二'] if "小明" in li:#判斷小明在不在名字列表里面 print(True) else: print(False) #False #判斷字符q是否不是python的成員 print('q'not in'pyhton') #not in 的操作就是和in的操作是相反的
身份運算符
看的是你引用的是不是同一塊內(nèi)存空間的內(nèi)容
is判斷兩個內(nèi)容是不是同一個地址
is not相反
a=1 b=a c=2 print(a is b)#True #a和b指定同一塊空間 print(a is c)#False #a和c不指向同一塊空間 print(f'a:{id(a)}') print(f'b:{id(b)}') print(f'c:{id(c)}') #a:1535758792 #b:1535758792 #c:1535758808 #可見, 我們通過id()這個函數(shù)我們就能看的出a和b二檔地址與c是不同的 #is判斷兩個內(nèi)容是不是同一個地址 #is not相反
使用id()能查看數(shù)據(jù)的地址
可變復制---copy()
在進行重要數(shù)據(jù)的賦值之前
我們需要對這個數(shù)據(jù)進行一個拷貝復制,因為這個數(shù)據(jù)一但被修改了就不能回復了
所以我們需要提前將這個數(shù)據(jù)進行復制一下
對于可以修改的數(shù)據(jù)類型,之前的數(shù)據(jù)就沒有了
且不能恢復
如果想保留修改之前的數(shù)據(jù)
我們需要提前備份一份數(shù)據(jù)
我們需要使用到copy()函數(shù)
copy()函數(shù)的使用方式:
li=[1,2,3,4,5] print(id(li))#72456872 li1=li.copy() print(li1) #[1, 2, 3, 4, 5] print(id(li1))#72456840
我們使用copy去備份數(shù)據(jù)的時候,copy會去額外申請一個空間去放這個備份的數(shù)據(jù)
備份類型直接對于只能修改的類型
列表、字典、集合
如果我們是想通過賦值來達到備份的效果,這個是不可能的
因為我們賦值出來的對象與原先的對象都指向著同一塊空間的
那么我們將原先對象進行改變,那么備份的對象也會被改變,因為都指向同一塊空間
所以我們需要copy()來專門進行備份的操作
通過copy會額外申請一塊空間
3.回顧
1.數(shù)值類型
整型 int 整數(shù) 不可以修改的
浮點型 float 帶小數(shù)點的數(shù)字 不可以修改的
布爾型 bool True(真1)、False(假0) 不可以修改的
2.序列類型(索引、切片)
字符串 str 用引號括起來的內(nèi)容 不可以修改的(存在修改方法,但是會生成新的字符串)
列表 list [元素1,元素2] 可以修改
元組 tuple (元素1,元素2) 不可以修改的
3.散列類型
字典 dict {鍵:值,鍵:值} 可以修改
集合 set {元素1,元素2} 可以修改
題目
1.用戶登錄
如果用戶名存在就輸入密碼,當密碼正確的時候就顯示登錄成功并且退出程序
如果用戶名不存在則提示用戶注冊
判斷用戶是否存在
存在---輸入密碼
不存在---提示用戶注冊
students =[ {'name':'張三','password':123}, {'name':'王五','password':888}, {'name':'趙六','password':456} ] name=input("請輸入用戶名:") for i in students: #i存在的是用戶的信息字典 if name==i['name']: #對輸入的用戶名進行判斷 for n in range(1,4): #循環(huán)3次進行輸入密碼的操作,如果輸入正確直接跳出循環(huán) pwd=eval(input("請輸入密碼:")) if pwd==i['password']: print('登錄成功') exit() #break#只能退出當前所在的循環(huán),就是跳出了里面的循環(huán),還是處于外部循環(huán) else: print(f'密碼錯誤,還剩{3-n}次機會') #if name==i['name'] and pwd==i['password'] : break else:#循環(huán)正常結束執(zhí)行,即沒有break語句 print("用戶名不存在") #對于這個程序的話,我們 不管輸入什么最后都會打印這個用戶名不存在 #我們內(nèi)循環(huán)里面的break僅僅只夠我們跳出內(nèi)部循環(huán) #但是沒有跳出外部循環(huán),這就是為什么會打印else的那句話 #那么我們就在外部循環(huán)加上一個判斷語句,如果條件成立就直接跳出 #那么就不會進行這個循環(huán)后面的代碼了 #總結,就是break只能退出當前所在的循環(huán),所以在外邊循環(huán)中我們需要再寫一個break跳出外部循環(huán) #對于后面的這個else語句來說 #循環(huán)正常結束執(zhí)行,即沒有break語句 #但是我們在內(nèi)循環(huán)break的位置加一個exit() #我們直接退出這個程序,那么就沒有后面else的事了 #如果后面有代碼的話,這個exit()影響到了后面代碼的執(zhí)行的話 #那么我們就使用break來跳出 #兩個break
students =[ {'name':'張三','password':123}, {'name':'王五','password':888}, {'name':'趙六','password':456} ] name=input("請輸入用戶名:") for i in students: #print(i) if name in i.values(): #獲取當前字典內(nèi)的值 #我們在這里需要用到字典相關的函數(shù)--values去獲取字典內(nèi)的值 #查看當前遍歷到的字典有沒有我們輸入的name #print("存在") for n in range(3): pws=int(input("請輸入密碼:")) if pws==i['password']: print("登錄成功") exit() else: print(f"密碼錯誤,還剩{3-n}次機會") else:#循環(huán)正常結束才會執(zhí)行 print("用戶名不存在") #在這個代碼里面只有一個循環(huán) #那么我們在break之后我們就不會觸發(fā)這個else了,我們直接跳出循環(huán)了 #我們這里的break跳出循環(huán)是非正常循環(huán)的
2.數(shù)字重復統(tǒng)計:
''' 數(shù)字重復統(tǒng)計: (1)隨機生成1000個整數(shù) import.random random.randint (2)數(shù)字的范圍[20,100] (3)升序輸出所有不同的數(shù)字及每個數(shù)字重復的次數(shù) ''' import random li=[]#創(chuàng)建一個空列表 for i in range(1000): num=random.randint(20,100) print(num) li.append(num)#我們將每次循環(huán)產(chǎn)生的數(shù)添加到這個列表中 print(li) #升序輸出所有不同的數(shù)字---去重(轉(zhuǎn)換為集合),排序(sort) li1=list(set(li)) #先轉(zhuǎn)換為集合再轉(zhuǎn)換為列表,我們就達到了去重的效果 print(li1) li1.sort()#默認是從小到大,升序的 print(li1) #每個數(shù)字重復的次數(shù)---統(tǒng)計數(shù)字出現(xiàn)的次數(shù)(序列.count(數(shù)據(jù))) for i in li1:#遍歷去重的列表 #進行統(tǒng)計,對沒有機芯工去重的列表進行統(tǒng)計 x=li.count(i) print(f'{i}出現(xiàn)了{x}次') #我們所有的數(shù)字已經(jīng)在li1里面了,而且沒有重復的 #那么我們將這個列表作為外循環(huán)的條件進行遍歷 #然后我們在li這個鏈表即興每次遍歷的數(shù)字的出現(xiàn)次數(shù)的計算 #我們需要將元素存儲起來 #那么存放多個元素的有什么呢? #列表、元組(不可修改)、字典(鍵值對)、集合 #那么最后只有列表和集合方便 #這個題的要求是還要統(tǒng)計重復數(shù)字的次數(shù)而且保存重復的數(shù)字 #那么我們直接將字典排除了 #因為字典是去重的 #那么最后我們就使用列表來對這些數(shù)字進行存儲
我們在最后統(tǒng)計每個數(shù)字出現(xiàn)的次數(shù)
我們將每個數(shù)字進行去重
然后針對每個數(shù)字進行計數(shù)
通過這里的代碼就會縮短時間
如果我們是對1000個數(shù)字一個一個進行遍歷的話會很慢的
我們第一步直接將出現(xiàn)的數(shù)字縮水顯現(xiàn)出來
然后我們再在原先的列表中進行遍歷計算這個數(shù)字出現(xiàn)的次數(shù)
總結
到此這篇關于一文帶你手撕Python之散列類型的文章就介紹到這了,更多相關Python散列類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解如何使用Plotly和Dash進行數(shù)據(jù)可視化
數(shù)據(jù)可視化是數(shù)據(jù)分析中至關重要的一環(huán),它能夠幫助我們更直觀地理解數(shù)據(jù)并發(fā)現(xiàn)隱藏的模式和趨勢,本文將介紹如何使用Plotly和Dash進行數(shù)據(jù)可視化,感興趣的可以了解下2024-04-04Python實現(xiàn)的微信公眾號群發(fā)圖片與文本消息功能實例詳解
這篇文章主要介紹了Python實現(xiàn)的微信公眾號群發(fā)圖片與文本消息功能,結合實例形式詳細分析了Python調(diào)用微信接口實現(xiàn)微信公眾號群發(fā)圖片與文本消息的具體操作步驟與相關注意事項,需要的朋友可以參考下2017-06-06Python itertools.product方法代碼實例
這篇文章主要介紹了Python itertools.product方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03