您好,登錄后才能下訂單哦!
小編給大家分享一下python如何高效處理數據類型,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
高效處理數據類型方法:
處理數據
In [1]: from random import randint In [2]: data=[randint(-10,10) for _ in range(10)] In [3]: data Out[3]: [-3, -4, 3, 4, 7, -2, -4, 1, 7, -9] #過濾列表中的負數 In [9]: list(filter(lambda x:x>=0,data)) Out[9]: [3, 4, 7, 1, 7] [for x in data if x>=0] # 列表生成式解法 [x for x in data if x>=0] #哪個更快,列表解析更快,遠快于迭代 In [15]: %timeit [x for x in data if x>=0] 581 ns ± 23.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) In [16]: %timeit filter(lambda x:x>=0,data) 237 ns ± 4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) #得到20個同學的成績 d={x:randint(60,100)for x in range(1,21)} #字典解析式,iteritems同時迭代字典, # #得到分數大于90的同學 {k:v for k,v in d.items() if v>90} #集合解析 In [35]: {x for x in s if x %3 ==0} Out[35]: {-9, -3, 3} #為元祖中的每個元素命名,提高程序可讀性 #元祖存儲空間小,訪問速度快 #定義常量 NAME = 0 AGE=1 SEX=2 EMAIL=3 #拆包用法,定義類似其他語言的枚舉類型,也就是定義數值常量 NAME,AGE,SEX,EMAIL=range(4) #案例 student=('Jim',16,'male','jin@163.com') #name print(student[0]) #age print(student[1]) #通過常量可以優化為 print(student[NAME]) print(student[AGE]) #namedtuple是繼承自tuple的子類,namedtuple和tuple比較有更酷的特性 #namedtuple創建一個和tuple類似的對象,而且對象擁有可以訪問的屬性。這對象更像帶有數據屬性的類,不過數據屬性是只讀的。 from collections import namedtuple Student = namedtuple('Student',['name','age','sex','email']) s=Student('Jim',16,'male','jim@163.com') s.name s.age #統計序列中元素出現的頻度 from random import randint data=[randint(0,20) for _ in range(30)] #創建字典{0:0,1:0,...} #方法1 c=dict.fromkeys(data,0) In [52]: for x in data: ...: c[x]+=1 #方法2,統計詞頻 from collections import Counter c2=Counter(data)#講序列傳入Counter的構造器,得到Counter對象是元素頻度的字典 #使用most_common統計詞頻 In [58]: c2.most_common(3) Out[58]: [(10, 4), (20, 3), (8, 3)] #統計英文作文詞頻 import re txt=open('emmmm.txt').read() #分割后賦給Counter c3=Counter(re.split('\W',txt)) #找到頻率最高的10個單詞 c3.most_common(10) #內置函數是以c的速度運行,如sorted from random import randint d={x:randint(60,100) for x in 'xyzabc'} #{'a': 91, 'b': 65, 'c': 76, 'x': 85, 'y': 84, 'z': 72} # sorted(d) In [15]: zip(d.values(),d.keys()) Out[15]: <zip at 0x108b34dc8> In [16]: list(zip(d.values(),d.keys())) Out[16]: [(68, 'x'), (70, 'y'), (77, 'z'), (72, 'a'), (65, 'b'), (69, 'c')] #快速找到多個字典中的公共鍵 #In [1]: from random import randint,sample In [2]: sample('abcdefg',3) Out[2]: ['c', 'a', 'b'] In [4]: sample('abcdefg',randint(3,6)) Out[4]: ['b', 'a', 'd'] In [5]: s1={x:randint(1,4)for x in sample('abcdefg',randint(3,6))} In [9]: s1 Out[9]: {'a': 1, 'b': 2, 'c': 3, 'f': 3, 'g': 3} In [10]: s1={x:randint(1,4)for x in sample('abcdefg',randint(3,6))} In [11]: s1 Out[11]: {'b': 2, 'd': 3, 'g': 3} In [12]: s1 Out[12]: {'b': 2, 'd': 3, 'g': 3} In [13]: s2={x:randint(1,4)for x in sample('abcdefg',randint(3,6))} In [15]: s3={x:randint(1,4)for x in sample('abcdefg',randint(3,6))} #for循環遍歷方法,找到s2,s3都有的k In [19]: res=[] In [20]: for k in s1: ...: if k in s2 and k in s3: ...: res.append(k ...: ) ...: ...: In [21]: res Out[21]: ['b'] #通過字典的keys()方法,找到三個字典同樣的key In [26]: s1.keys()&s2.keys()&s3.keys() Out[26]: {'b'} #通過map得到一個迭代器對象 #In [27]: map(dict.keys,[s1,s2,s3]) Out[27]: <map at 0x108891b70> In [28]: list(map(dict.keys,[s1,s2,s3])) Out[28]: [dict_keys(['g', 'd', 'b']), dict_keys(['g', 'a', 'c', 'b', 'f']), dict_keys(['d', 'f', 'b', 'c', 'e', 'a'])] #通過reduce取出同樣結果 In [30]: from functools import reduce In [31]: reduce(lambda a,b:a&b,map(dict.keys,[s1,s2,s3])) Out[31]: {'b'} #使得 from time import time from random import randint from collections import OrderedDict d=OrderedDict() players = list("ABCDEFGH") start=time() for i in range(8): input() p=players.pop(randint(0,8-i)) end=time() print(i+1,p,end-start) d[p]=(i+1,end-start) print('') print('-'*20) for k in d: print(k,d[k]) #查看用戶歷史記錄功能,標準庫collections的deque,雙端循環隊列,存在內容中,pickle存儲到文件 from random import randint from collections import deque N = randint(0,100) history = deque([],5) def guess(K): if K ==N: print('正確') return True if K < N: print('%s is less-than N'%K) else: print("%s is greater-than N"%K) return False while True: line = input("請輸入一個數字:") if line.isdigit(): k=int(line) history.append(k) if guess(k): break elif line =='history' or line =='h?': print(list(history))
以上是“python如何高效處理數據類型”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。