Python进阶全系列
生活随笔
收集整理的這篇文章主要介紹了
Python进阶全系列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.推導式
import random#列表解析 L=[random.randint(-10,10) for _ in range(10)]#隨機生成長度為10的隨機列表 print(L) #選取大于0的元素 #方法一 print([x for x in L if x>0])#方法二: g=filter(lambda x:x>0,L) print(list(g))#字典解析練習 #方法一: D={'stu%d'%i:random.randint(0,100) for i in range(1,21)} print(D) print("優秀的學生如下:\n",{k:v for k,v in D.items() if v>=84})#方法二: print("優秀的學生如下2:\n",dict(filter(lambda item:item[1]>=85,D.items())))2.將下標對應到具體含義,提高可讀性
"""將下標替換成語義,使代碼可讀性好的方法 """ s=("張三",19,"男") #方法一:賦值 name,age,sex=range(3) print("方法一:",s[name],s[age],s[sex])#方法二:枚舉 from enum import IntEnum class StudentEnum(IntEnum):NAME=0AGE=1SEX=2 print("方法二:",s[StudentEnum.NAME],s[StudentEnum.AGE],s[StudentEnum.SEX])#方法三:利用構造器構造 from collections import namedtuple Student=namedtuple('Student',['name','age','sex'])#namedtuple返回一個類,類名為Student s2=Student('Jim',18,"male")#s2是Student這個類的實例, s2是一個tuple類型 print("方法三(1):",s2.name,s2.age,s2.sex) print(" s2是一個tuple類型嗎?",isinstance(s2,tuple)) #既然s2是元組,那么就可以按照元組方式訪問 print("方法三(2):",s2[name],s2[age],s2[sex])運行結果:
3.根據字典中值的大小,對項進行排序
解決方法:將字典中的各項轉換為元組,使用內置函數sorted 排序。
????????方案一:將字典中的項轉化為(值,鍵)元組。(列表解析或zip )
T=(1,3,1,5,2,6) print("驗證元組是可以排序的:",sorted(T))#元組是可以排序的 print("元組的比較方法與字符串一樣:(3,2)>(2,4)?",("Yes" if (3,2)>(2,4) else "No")) print(" (3,2)>(3,4)?",("Yes" if (3,2)>(3,4) else "No"),end='\n\n')import random d={k:random.randint(60,100) for k in "abcdefgh"} print("d=",d)#方案一(1):使用列表解析將字典轉換為元組從而比較大小 d1={(v,k) for k,v in d.items()}#因為元組可以比較大小,所以生成元組 print("交換key和value的順序后:",d1) print("按照數字從大到小的順序為:",sorted(d1,reverse=True),end="\n\n")#方案一(2):使用zip d2=list(zip(d.values(),d.keys())) print("zip函數的使用介紹:",d2) print("使用zip方法排序后的結果:",sorted(d2))????????方案一的運行結果:
????????方案二:傳遞sorted函數的key參數
#方案二:使用sorted的key參數 d3=sorted(d.items(),key=lambda item:item[1],reverse=True) print("使用sorted的key參數:",d3) #標記為第一名、第二名... l3=list(enumerate(d3,1)) print("標記完的結果:",l3)#1表示從1開始,默認為0 dd3={k:(i,v) for i,(k,v) in enumerate(d3,1)} print("方案二的最終結果為",dd3)????????方案二的運行結果:
4.統計序列中元素的頻度
????????方案1:將序列轉換為字典{元素:頻度},根據字典中的值排序。
import random data=[random.randint(0,20) for _ in range(30)] print("data為:",data) d=dict.fromkeys(data,0)#賦初值全為0,key為data的元素,切去除重復 for x in data:d[x]+=1 print("統計后的結果為:",d)#根據出現頻度排序:大->小 dd=sorted(d.items(),key=lambda item:item[1],reverse=True) print("排序后的結果為:",dd) print("并找到頻度最高的前三個:",dd[:3])#從一大堆數據中找出前三個:堆 import heapq print("使用堆來尋找前三個元素:",heapq.nlargest(3,((v,k) for k,v in d.items())))#3表示取前三個????????方案一的運行結果:
????????方案二:使用標準庫collections中的Counter對象。
#方案二:使用collections中的Counter對象 from collections import Counter c=Counter(data) print("使用Counter得到的前三個結果是:",c.most_common(3))??????????方案二的運行結果:
?
5.快速找到多個字典中的公共鍵(key)
????????方案:利用集合(set)的交集操作
????????? ??
????????運行結果:
總結
以上是生活随笔為你收集整理的Python进阶全系列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ./4.sh: No such file
- 下一篇: container_of宏