婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 4種非常實用的python內置數據結構

4種非常實用的python內置數據結構

熱門標簽:荊州云電銷機器人供應商 遼寧400電話辦理多少錢 江蘇房產電銷機器人廠家 電信營業廳400電話申請 悟空智電銷機器人6 蘇州電銷機器人十大排行榜 外呼不封號系統 溫州旅游地圖標注 幫人做地圖標注收費算詐騙嗎

array

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

from array import array
l = list(range(100))
a = array.fromlist(l)

print(l.__sizeof__(), a.__sizeof__())

目前array有兩個限制。首先,它只支持整數、小數、unicode字符,而不能像C++的vector那樣支持多種數據類型。另外目前指定類型比較麻煩,我們需要使用類型對應的字母縮寫來指定,而不能使用簡單的諸如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的默認構造函數構造一個值,而Python默認的dict對于不存在的key的訪問會拋出異常(賦值除外)。這是因為Python不知道value的類型,所以沒辦法為我們默認構造。
defaultdict要求我們在構造時指定一個類型,然后會自動根據需要初始化value。這樣我們就可以使用簡單的代碼來實現很多功能。

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

import collections
students = ['Zhang San', 'Li Si', 'Zhou liu', 'Chen qi', 'Cheng ba']
# using defaultdict
dd = 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 defaultdict
dd = collections.defaultdict(int)
for s in scores :
	dd[s] += 1
print(dd)
# using original dict (method 2)
od = collections.defaultdict(int)
for s in scores :
	if s not in do:
		do[s] = 1
	else:
		do[s] += 1
print(od)

Named Tuple

編程實踐中我們經常需要創建一些小的數據結構用來整合一組相關聯的數據,簡單的比如地理坐標的經緯度,顏色的RGB值或者矩形框的左上和右下坐標,復雜的比如構造一個窗口的一組參數。
實踐中,我們通常有3中實現方法:

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

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

# class
class Rect:
	def __init__(self, x1, y1, x2, y2):
		self.x1 = x1
		self.y1 = y1
		self.x2 = x2
		self.y2 = y2
		
def area_class(r):
	w = r.x2 - r.x1
	h = r.y2 - r.y1
	return w*h

r1 = 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))

# tuple
def area_tuple(r):
	w = r[2]-r[0]
	h = r[3]-r[1]
	return w*h

r2 = (1,3,5,5)
print(r2)
# (1, 3, 5, 5)
print(area_tuple(r2))

# dict
def area_dict(r):
	w = r["x2"] - r["x1"]
	h = r["y2"] - r["y1"]
	return w*h

r3 = {"x1":1, "y1":3, "x2":5, "y2":5}
print(r3)
# {'x1': 1, 'y1': 3, 'x2': 5, 'y2': 5}
print(area_tuple(r3))

# named tuple
import collections
Rectangle = collections.namedtuple("Rectangle", ["x1", "y1", "x2", "y2"])

def area_namedtuple(r):
	w = r.x2 - r.x1
	y = r.y2 - r.y1
	return w*h

r4 = Rectangle(1,3,5,5)
print(r4)
# Rectangle(x1=1, y1=3, x2=5, y2=5)
x1,y2,x2,y2 = r4
print(x1,y2,x2,y2)
# 1 3 5 5
print(area_namedtuple(r4))
print(area_class(r4)) # work with "." grammar
print(area_tuple(r4)) # work with index
print(area_dict(r4._asdict())) # work with dict

Counter

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

c = Counter()                           # a new, empty counter
c = Counter('gallahad')                 # a new counter from an iterable
print(c)
# Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
print(c)
# Counter({'red': 4, 'blue': 2})
c = Counter(cats=4, dogs=8)             # a new counter from keyword args
print(c)
# Counter({'dogs': 8, 'cats': 4})

除了基本的計數功能,它還支持一些常用的相關功能。比如:

  • 按照頻率排序(most_common([n]))。其中n是可選輸入,表示返回前n個最頻繁的元素和他們的頻率。默認情況下返回所有的元素。
  • 按照頻率輸出元素本身(elements())。它會返回元素本身,但是元素的順序不是原來的,相同的元素會連續輸出。不同元素之間,按照他們的出現順序輸出,這一點是OrderedDict以及3.7之后的dict所提供的特性。
  • 兩個Counter相減(substract(c))。它可以從第一個counter上減去第二個counter中對應元素出現的次數。對于只出現在第二個coutner中元素,默認其在第一個counter中出現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內置數據結構的詳細內容,更多關于python內置數據結構的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Python基礎之數據結構詳解
  • python中常用的數據結構介紹
  • python實現數據結構中雙向循環鏈表操作的示例
  • Python描述數據結構學習之哈夫曼樹篇
  • 淺談Python描述數據結構之KMP篇
  • 基于python實現模擬數據結構模型
  • Python數據結構dict常用操作代碼實例
  • 基于Python數據結構之遞歸與回溯搜索
  • 淺析Python語言自帶的數據結構有哪些
  • Python 實現數據結構-堆棧和隊列的操作方法
  • Python 實現數據結構-循環隊列的操作方法

標簽:宿遷 黃山 喀什 濟南 臺灣 欽州 三沙 景德鎮

巨人網絡通訊聲明:本文標題《4種非常實用的python內置數據結構》,本文關鍵詞  4種,非常,實,用的,python,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《4種非常實用的python內置數據結構》相關的同類信息!
  • 本頁收集關于4種非常實用的python內置數據結構的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    懂色av一区二区三区蜜臀| 日韩视频不卡中文| 日韩区在线观看| 视频一区欧美精品| 亚洲成人av福利| 亚洲国产成人自拍| 欧美在线免费观看亚洲| 国产综合久久久久久鬼色| 中文字幕高清不卡| 欧美一级理论片| 欧美日韩视频在线一区二区| 久久成人久久鬼色| 久久国产精品色| 香港成人在线视频| 日韩精品一区二区三区视频| 伊人夜夜躁av伊人久久| 国产精品―色哟哟| 成人黄色一级视频| 国产日韩欧美不卡在线| 99精品视频一区二区| 国产喷白浆一区二区三区| 久久精品久久精品| 亚洲午夜一区二区三区| 亚欧色一区w666天堂| 91蝌蚪porny| 亚洲视频一二三区| 国产精品免费人成网站| 日韩精品一区二区在线| 国产蜜臀av在线一区二区三区| 日韩一级黄色片| 中文字幕亚洲一区二区av在线 | 欧美一区二区三区视频免费 | 曰韩精品一区二区| 亚洲免费av网站| 成人高清伦理免费影院在线观看| 香蕉久久夜色精品国产使用方法 | 国产精品初高中害羞小美女文| 亚洲精选一二三| 欧美久久久久久久久中文字幕| 国产精品初高中害羞小美女文 | 欧美α欧美αv大片| 91极品视觉盛宴| 激情综合网av| 91国偷自产一区二区使用方法| 色悠久久久久综合欧美99| 国产主播一区二区| 国产精品久久久久久久浪潮网站| 日本aⅴ亚洲精品中文乱码| 久久免费偷拍视频| 国产精品久久久久久久久久久免费看 | 亚洲线精品一区二区三区| 欧美激情资源网| 日韩亚洲欧美高清| 欧美丰满少妇xxxxx高潮对白| 图片区日韩欧美亚洲| 成人免费视频caoporn| 国产在线精品免费av| 粉嫩av亚洲一区二区图片| 久久日韩粉嫩一区二区三区 | 亚洲黄色小视频| 欧美mv日韩mv亚洲| 国产精品久线在线观看| 免费欧美在线视频| 日韩精品在线看片z| 亚洲国产精品精华液ab| 韩国成人福利片在线播放| 亚洲女人****多毛耸耸8| 亚洲欧洲日产国产综合网| 亚洲国产日韩a在线播放性色| 久草中文综合在线| 在线欧美小视频| 午夜激情综合网| 日韩电影网1区2区| 91精品久久久久久久99蜜桃 | 欧美日韩国产成人在线免费| 国产精品自拍毛片| 伊人性伊人情综合网| 亚洲制服欧美中文字幕中文字幕| 亚洲永久免费av| 日韩码欧中文字| 狠狠色丁香久久婷婷综合丁香| 亚洲一区在线观看免费观看电影高清 | 久久丁香综合五月国产三级网站| 2023国产精品自拍| 国内精品免费在线观看| 日韩电影免费在线| 日韩一二三四区| 欧美精品aⅴ在线视频| 国产精品婷婷午夜在线观看| 国产成人免费在线观看| 青青草精品视频| 色欧美88888久久久久久影院| 亚洲猫色日本管| 亚洲激情男女视频| 精品美女一区二区| 日韩av电影天堂| 天堂久久久久va久久久久| 天涯成人国产亚洲精品一区av| 7777精品伊人久久久大香线蕉| 久久成人免费电影| 91免费版在线| 日韩情涩欧美日韩视频| 欧美日韩极品在线观看一区| 欧美国产精品一区二区三区| 中文字幕一区二区三区蜜月| 91在线观看高清| 亚洲欧美一区二区三区极速播放| 北岛玲一区二区三区四区| 精品久久久久久久久久久久久久久久久 | 日韩精品视频网站| 日本不卡高清视频| 久久电影国产免费久久电影| 91麻豆蜜桃一区二区三区| 国产精品一区二区男女羞羞无遮挡| 亚洲综合在线第一页| 国产精品久久久久永久免费观看| 在线综合视频播放| 久久丝袜美腿综合| 91在线精品一区二区| 欧美成人aa大片| 99国产精品国产精品久久| 欧美日韩国产综合视频在线观看| 欧美日韩午夜在线| 成人免费视频一区二区| 天天操天天色综合| 国产精品一区在线观看你懂的| 91麻豆国产福利在线观看| 伊人婷婷欧美激情| 亚洲黄色片在线观看| 亚洲精品中文字幕乱码三区| 亚洲观看高清完整版在线观看 | 日韩精品一二区| 日本麻豆一区二区三区视频| 亚洲国产精品尤物yw在线观看| 精品成a人在线观看| 狠狠狠色丁香婷婷综合激情| 性感美女久久精品| 成人黄色电影在线| 国产成人8x视频一区二区| 成人美女视频在线观看| 久久激情五月激情| 奇米888四色在线精品| 国产不卡视频一区| 一区二区三区在线不卡| 亚洲三级视频在线观看| 久久精品视频免费| 国产精品女同一区二区三区| 成人午夜视频福利| 欧美电视剧免费全集观看| 成人免费高清视频| 高清在线观看日韩| 精品国产123| 国产一区二区免费在线| 国产美女一区二区| 欧美丰满美乳xxx高潮www| 青青草97国产精品免费观看 | 中文字幕精品—区二区四季| 久久精品国产一区二区| 无吗不卡中文字幕| 久久99国产精品尤物| 日本久久电影网| 成人黄色国产精品网站大全在线免费观看| 色婷婷精品久久二区二区蜜臀av| 精品美女一区二区| 午夜精品久久久久久久99樱桃 | 日韩一区二区在线看片| 另类小说一区二区三区| 久久av资源网| 99久久精品免费| 欧美videossexotv100| 午夜电影网亚洲视频| 亚洲综合无码一区二区| 成人永久aaa| 69堂精品视频| 日韩电影免费在线观看网站| 99国产精品久久久久久久久久 | 成人欧美一区二区三区黑人麻豆| av高清不卡在线| 亚洲欧美日韩国产中文在线| 国产精品久久久久久久久快鸭| 91原创在线视频| 欧美少妇bbb| 蜜桃视频第一区免费观看| 成人av在线网| 久久蜜桃香蕉精品一区二区三区| 成人国产视频在线观看| 91网站黄www| 国产一区二区日韩精品| 玖玖九九国产精品| 丝袜美腿亚洲综合| 亚洲国产成人在线| 国产精品欧美极品| 亚洲综合在线免费观看| 国产精品你懂的在线| 在线观看中文字幕不卡| 石原莉奈一区二区三区在线观看| 樱花草国产18久久久久| 亚洲不卡一区二区三区| 精品国产不卡一区二区三区| 97aⅴ精品视频一二三区|