成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

4種非常實用的python內(nèi)置數(shù)據(jù)結(jié)構(gòu)

瀏覽:3日期:2022-06-20 17:45:31
array

Python不僅僅可以使用內(nèi)置的list實現(xiàn)數(shù)組,還支持像C語言那樣的指定類型的原生數(shù)組array。很顯然,因為list可以存儲各種類型的對象,而array只存儲一個指定的原生類型,所以當數(shù)據(jù)量較大時,原生array在內(nèi)存占用方面要比list小。而且array不像C語言里那樣在定義時就限制了大小,它支持list所支持的各種常用函數(shù)。相比之下Python的array更像是C++的vector。

from array import arrayl = list(range(100))a = array.fromlist(l)print(l.__sizeof__(), a.__sizeof__())

目前array有兩個限制。首先,它只支持整數(shù)、小數(shù)、unicode字符,而不能像C++的vector那樣支持多種數(shù)據(jù)類型。另外目前指定類型比較麻煩,我們需要使用類型對應的字母縮寫來指定,而不能使用簡單的諸如int,float的方式。

a = array(’i’)a.append(1)a.append(4)Type code C Type Python Type Minimum size in bytes ’b’ signed char int 1 ’B’ unsigned char int 1 ’u’ wchar_t Unicode character 2 ’h’ signed short int 2 ’H’ unsigned short int 2 ’i’ signed int int 2 ’I’ unsigned int int 2 ’l’ signed long int 4 ’L’ unsigned long int 4

更詳細的信息可以參考:https://docs.python.org/3.8/library/array.html

defaultdict

C++的map對于新的key會自動使用value type的默認構(gòu)造函數(shù)構(gòu)造一個值,而Python默認的dict對于不存在的key的訪問會拋出異常(賦值除外)。這是因為Python不知道value的類型,所以沒辦法為我們默認構(gòu)造。defaultdict要求我們在構(gòu)造時指定一個類型,然后會自動根據(jù)需要初始化value。這樣我們就可以使用簡單的代碼來實現(xiàn)很多功能。

下面的代碼,我對比了使用defaultdict和original dict實現(xiàn)將學生按照姓的首字母分組的功能,以及分類計數(shù)的功能。

import collectionsstudents = [’Zhang San’, ’Li Si’, ’Zhou liu’, ’Chen qi’, ’Cheng ba’]# using defaultdictdd = collections.defaultdict(list)for s in students:key = s[0]dd[key].append(s)print(dd)# using original dict (method 1)od = {}for s in students:key = s[0]if key not in do:od[key] = []od[key].append(s)print(od)scores = [’A’, ’B’, ’C’, ’A’, ’A’, ’B’, ’C’, ’B’, ’A’, ’A’]# using defaultdictdd = collections.defaultdict(int)for s in scores :dd[s] += 1print(dd)# using original dict (method 2)od = collections.defaultdict(int)for s in scores :if s not in do:do[s] = 1else:do[s] += 1print(od)Named Tuple

編程實踐中我們經(jīng)常需要創(chuàng)建一些小的數(shù)據(jù)結(jié)構(gòu)用來整合一組相關(guān)聯(lián)的數(shù)據(jù),簡單的比如地理坐標的經(jīng)緯度,顏色的RGB值或者矩形框的左上和右下坐標,復雜的比如構(gòu)造一個窗口的一組參數(shù)。實踐中,我們通常有3中實現(xiàn)方法:

對每一個這樣的數(shù)據(jù)結(jié)構(gòu)創(chuàng)建一個class。優(yōu)點是可以直接使用名字訪問數(shù)據(jù)成員,而且支持復雜的訪問邏輯和數(shù)據(jù)操作。缺點是需要編寫對應的類和必須的函數(shù),管理文件和引用關(guān)系。 使用tuple。優(yōu)點是編寫簡單,內(nèi)存使用效率高。缺點是只能使用下標訪問,可讀性差,容易出錯。 使用dict,用str來作為對于屬性的名字。優(yōu)點是編寫相對簡單,而且保留了變量的名字。缺點是需要使用字符串表示名字較為麻煩,而且每一個結(jié)構(gòu)都要保存作為名字的字符串,浪費空間。

collections的nametuple可以為我們直接構(gòu)造一個具有名字的簡單類型,方便快捷地實現(xiàn)類似手寫了一個class的效果。需要注意的是collections.nametuple是一個factory function,它用來幫我們創(chuàng)建一個類型,而不是這個類型的具體對象。創(chuàng)建類型時,我們可以指定各個屬性的名字,之后就可以使用.來訪問了,而且它同時還支持使用下標訪問。同時Named Tuple還支持_asdict函數(shù)用來將內(nèi)部的數(shù)值轉(zhuǎn)換成一個dict。

# classclass Rect:def __init__(self, x1, y1, x2, y2):self.x1 = x1self.y1 = y1self.x2 = x2self.y2 = y2def area_class(r):w = r.x2 - r.x1h = r.y2 - r.y1return w*hr1 = Rect(1,3,5,5)# <__main__.Rect object at 0x7fde252a87f0># to show its content, we need to implement __repr__(self) or __str__(self)print(area_class(r1))# tupledef area_tuple(r):w = r[2]-r[0]h = r[3]-r[1]return w*hr2 = (1,3,5,5)print(r2)# (1, 3, 5, 5)print(area_tuple(r2))# dictdef area_dict(r):w = r['x2'] - r['x1']h = r['y2'] - r['y1']return w*hr3 = {'x1':1, 'y1':3, 'x2':5, 'y2':5}print(r3)# {’x1’: 1, ’y1’: 3, ’x2’: 5, ’y2’: 5}print(area_tuple(r3))# named tupleimport collectionsRectangle = collections.namedtuple('Rectangle', ['x1', 'y1', 'x2', 'y2'])def area_namedtuple(r):w = r.x2 - r.x1y = r.y2 - r.y1return w*hr4 = Rectangle(1,3,5,5)print(r4)# Rectangle(x1=1, y1=3, x2=5, y2=5)x1,y2,x2,y2 = r4print(x1,y2,x2,y2)# 1 3 5 5print(area_namedtuple(r4))print(area_class(r4)) # work with '.' grammarprint(area_tuple(r4)) # work with indexprint(area_dict(r4._asdict())) # work with dictCounter

顧名思義,Counter是用來對元素進行計數(shù)的,它也是collections這個包里的。根據(jù)Python的官方文檔,它是dict類型的一個子類。在構(gòu)造的時候輸入一個iterable的類型,比如list,range或是一個mapping的類型,比如dict,defaultdict。然后Counter就會對其中的元素進行計數(shù)。比較特殊的是,Counter對負數(shù)沒有做特殊處理,就是說在特殊操作下允許出現(xiàn)測試為負,后面我們會有例子。

c = Counter() # a new, empty counterc = Counter(’gallahad’) # a new counter from an iterableprint(c)# Counter({’a’: 3, ’l’: 2, ’g’: 1, ’h’: 1, ’d’: 1})c = Counter({’red’: 4, ’blue’: 2}) # a new counter from a mappingprint(c)# Counter({’red’: 4, ’blue’: 2})c = Counter(cats=4, dogs=8) # a new counter from keyword argsprint(c)# Counter({’dogs’: 8, ’cats’: 4})

除了基本的計數(shù)功能,它還支持一些常用的相關(guān)功能。比如:

按照頻率排序(most_common([n]))。其中n是可選輸入,表示返回前n個最頻繁的元素和他們的頻率。默認情況下返回所有的元素。 按照頻率輸出元素本身(elements())。它會返回元素本身,但是元素的順序不是原來的,相同的元素會連續(xù)輸出。不同元素之間,按照他們的出現(xiàn)順序輸出,這一點是OrderedDict以及3.7之后的dict所提供的特性。 兩個Counter相減(substract(c))。它可以從第一個counter上減去第二個counter中對應元素出現(xiàn)的次數(shù)。對于只出現(xiàn)在第二個coutner中元素,默認其在第一個counter中出現(xiàn)0次。

c = Counter(a=4, b=2, c=0, d=-2)sorted(c.elements())# [’a’, ’a’, ’a’, ’a’, ’b’, ’b’]Counter(’abracadabra’).most_common(3)# [(’a’, 5), (’b’, 2), (’r’, 2)]c1 = Counter(a=4, b=2, d=-2)c2 = Counter(a=1, b=2, c=3, d=4)c1.subtract(c2)c1# Counter({’a’: 3, ’b’: 0, ’c’: -3, ’d’: -6})

更多的參考信息大家可以參考官方文檔:

https://docs.python.org/3/library/collections.html

以上就是4種非常實用的python內(nèi)置數(shù)據(jù)結(jié)構(gòu)的詳細內(nèi)容,更多關(guān)于python內(nèi)置數(shù)據(jù)結(jié)構(gòu)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Python 編程
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
从欧美一区二区三区| 欧美婷婷在线| 97精品视频在线观看自产线路二| 日韩电影免费在线| 91久久久久| 国产亚洲精品福利| 成人国产在线观看| 欧美福利电影网| 极品尤物av久久免费看| 欧洲av一区二区嗯嗯嗯啊| 亚洲超碰97人人做人人爱| 亚洲国产精品一区在线观看不卡| 久热精品视频| 亚洲国产精品自拍| 影音先锋一区| 国产精品国产a| 国产精品国产三级国产专区53| 欧美日韩精品一区二区三区| 亚洲高清在线精品| 一区二区冒白浆视频| 亚洲欧美区自拍先锋| 亚洲承认在线| 亚洲人成影院在线观看| 亚洲国产成人不卡| 亚洲曰韩产成在线| 亚洲欧美国产不卡| 亚洲国产精品嫩草影院| 久久国产精品亚洲va麻豆| 香蕉成人啪国产精品视频综合网| 91免费版pro下载短视频| 久久综合999| 欧美成人国产| 亚洲免费伊人电影| 亚洲一区二区三区四区中文| 亚洲va韩国va欧美va精品 | 亚洲视频中文字幕| 在线电影一区| 一区二区三区四区蜜桃| 国产视频一区三区| 五月激情丁香一区二区三区| 欧美性xxxxxxxx| 国产一区二区三区免费看| 欧美一激情一区二区三区| 成人aaaa免费全部观看| 久久免费的精品国产v∧| 欧美日韩国产成人精品| 最新中文字幕一区二区三区| 国产精品一区毛片| 婷婷六月综合网| 欧美日韩在线观看一区二区| 国产一区二区三区在线观看精品| 媚黑女一区二区| 日本在线不卡视频| 欧美视频一区在线观看| 成人免费高清视频| 国产精品毛片久久久久久| 国产亚洲精品久久飘花| 偷拍一区二区三区四区| 在线播放一区二区三区| 91麻豆精东视频| 亚洲欧美激情视频在线观看一区二区三区| 91污在线观看| 欧美国产日韩a欧美在线观看| 成a人片国产精品| 国产精品国产三级国产普通话三级| 成人的网站免费观看| 精品粉嫩超白一线天av| 国产综合婷婷| 亚洲午夜电影在线观看| 欧美日本一区二区在线观看| 91网站视频在线观看| 一区二区三区在线影院| 色狠狠综合天天综合综合| 国产成人av影院| 国产精品萝li| 色噜噜狠狠成人网p站| 丁香五精品蜜臀久久久久99网站 | 欧美在线不卡视频| 国产在线视频一区二区| 精品美女在线观看| 91久久国产综合久久蜜月精品| 中文字幕视频一区二区三区久| 99re免费视频精品全部| 亚洲色图在线播放| 欧美性受xxxx| 午夜激情一区| 亚洲h在线观看| 日韩免费看的电影| 91久久视频| 国产福利电影一区二区三区| 最新中文字幕一区二区三区| 欧美四级电影网| 欧美成人69av| 丝袜亚洲另类欧美| 欧美一区日韩一区| 亚洲欧洲一区| 国产成人一区二区精品非洲| 一级中文字幕一区二区| 91精品国产免费| 一本久久综合| 国产91精品一区二区麻豆亚洲| 精品国精品自拍自在线| 亚洲人成网站在线观看播放| 久草中文综合在线| 国产精品福利在线播放| 7777精品伊人久久久大香线蕉的| 国产不卡高清在线观看视频| 国产精品毛片大码女人| 欧美日韩国产片| 在线免费观看一区二区三区| 国产精品系列在线观看| 亚洲综合久久av| 久久综合九色综合欧美亚洲| 亚洲一区观看| 成人app网站| 青青草国产精品亚洲专区无| 中文av一区二区| 欧美日韩高清一区二区三区| 日韩午夜高潮| 99国内精品久久| 久久电影网站中文字幕| 亚洲黄色录像片| 欧美精品一区二区三区蜜桃视频| 欧美天天在线| 国产一区二区不卡老阿姨| 一区二区三区四区不卡在线| 日韩一区国产二区欧美三区| 国产精品美女黄网| 波多野结衣一区二区三区 | 免费在线一区观看| 国产日韩亚洲欧美综合| 欧美福利视频一区| 亚洲主播在线| 国产精品国产一区二区| 国产精品996| 亚洲一区免费视频| 国产欧美一区二区精品久导航 | 久久午夜电影网| 日本高清不卡aⅴ免费网站| 一区二区动漫| 黑人中文字幕一区二区三区| 国产大片一区二区| 久久不见久久见免费视频7| 亚洲日韩欧美一区二区在线| 久久色在线观看| 欧美精品在线一区二区| 一本色道a无线码一区v| 亚洲三级毛片| 国产精品99一区二区| 成人v精品蜜桃久久一区| 美女视频黄 久久| 亚洲成人动漫在线免费观看| 亚洲精品视频在线| 国产精品电影一区二区三区| 久久影视一区二区| 欧美一级免费观看| 欧美日韩精品一区二区| 欧美综合天天夜夜久久| 久久久久天天天天| 国产精品免费看| 激情欧美一区| 国产精品videosex极品| 欧美不卡三区| 91首页免费视频| 99精品视频在线观看免费| 国产精品综合网| 国产一区二区三区免费| 国产一区二区三区av电影| 国产主播一区二区三区| 男女激情视频一区| 免费在线看成人av| 日本人妖一区二区| 日韩高清欧美激情| 日本午夜一本久久久综合| 午夜影院久久久| 亚洲成人在线免费| 亚洲午夜免费电影| 亚洲一区二区黄色| 亚洲一区在线视频观看| 亚洲成人你懂的| 天天射综合影视| 日本美女一区二区三区| 久久精品国产999大香线蕉| 韩国理伦片一区二区三区在线播放| 亚洲欧美国产毛片在线| 亚洲欧美成aⅴ人在线观看| 亚洲欧美激情一区二区| 亚洲自拍偷拍图区| 亚洲成av人片一区二区梦乃| 午夜精彩视频在线观看不卡| 午夜久久久影院| 毛片av一区二区| 国产综合久久久久久久久久久久 | 亚洲天堂久久久久久久| 国产欧美精品一区二区色综合朱莉 | 精品国产1区二区| 久久精品一区二区三区不卡牛牛 | 亚洲亚洲精品三区日韩精品在线视频| 久久精品99国产精品日本| 极品少妇xxxx精品少妇|