Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mari bercakap tentang Koleksi, modul terbina dalam Python

Mari bercakap tentang Koleksi, modul terbina dalam Python

王林
王林ke hadapan
2023-04-12 12:46:081148semak imbas

Mari bercakap tentang Koleksi, modul terbina dalam Python

1. Penerangan modul

koleksi ialah modul terbina dalam Python Apa yang dipanggil modul terbina dalam bermaksud modul itu dibungkus dalam Python dan boleh digunakan terus tanpa pemasangan.

  • koleksi mengandungi beberapa bekas khas, menyediakan alternatif kepada bekas terbina dalam Python, seperti: senarai, dict, set, tupel.
  • namedtuple: boleh mencipta tuple yang mengandungi nama.
  • deque: Bekas yang serupa dengan senarai yang boleh menambah dan mengalih keluar elemen dengan cepat daripada kepala dan ekor baris gilir.
  • OrderedDict: Subkelas dikt yang boleh mengingati susunan unsur yang ditambahkan.
  • defaultdict: Subkelas dikt yang boleh memanggil fungsi yang memberikan nilai lalai.
  • Kaunter: Subkelas dikt yang mengira objek boleh cincang.

2. Kod sebenar

(1) fungsi testNamedTuple

Python menyediakan banyak jenis asas yang sangat berguna, seperti tuple jenis tidak berubah, yang boleh kita Gunakan dengan mudah ia untuk mewakili vektor binari.

namedtuple ialah fungsi yang mencipta objek tuple tersuai dan menentukan bilangan elemen tuple dan boleh menggunakan atribut dan bukannya indeks untuk merujuk elemen tuple.

Dengan cara ini, kita boleh menggunakan namedtuple untuk mentakrifkan jenis data dengan mudah, yang mempunyai invarian tuple dan boleh dirujuk berdasarkan atribut, menjadikannya sangat mudah untuk digunakan.

Dalam contoh ini, kami menggunakan koordinat tiga dimensi x, y, z untuk mentakrifkan objek tuple Terdapat tiga elemen objek, dan kemudian nilai yang sepadan boleh dirujuk melalui nilai koordinat.

from collections import namedtuple
from collections import deque
from collections import defaultdict
from collections import OrderedDict
from collections import Counter
def testNamedTuple():
vector=namedtuple('vector',['x','y','z'])
flag=vector(3,4,5)
print(type(flag))
print(isinstance(flag,vector))
print(isinstance(flag,tuple)) #通过这里的判定我们就可以知晓它是元组类型
print(flag.x,flag.y,flag.z)

(2) fungsi testDeque

deque ialah pelaksanaan umum tindanan dan baris gilir, dan deque ialah singkatan daripada "baris gilir dua hujung".

deque menyokong penyisipan selamat-benang, cekap memori dan pemadaman elemen pada kedua-dua hujung deque dengan lebih kurang prestasi O(1) Walaupun senarai juga menyokong operasi yang serupa, ia dioptimumkan terutamanya untuk operasi panjang tetap. , menghasilkan kerumitan masa O(n) pada pop(0) dan insert(0,v) (yang akan mengubah kedudukan dan saiz data).

Dalam struktur data, kita tahu bahawa baris gilir dan tindanan ialah dua jenis data yang sangat penting, satu masuk dahulu, keluar dahulu dan satu lagi masuk terakhir, keluar dahulu.

Dalam python, apabila menggunakan senarai untuk menyimpan data, mengakses elemen mengikut indeks adalah sangat pantas, tetapi memasukkan dan memadam elemen adalah sangat perlahan, kerana senarai adalah storan linear, dan apabila jumlah data adalah besar, kecekapan sisipan dan pemadaman adalah sangat rendah.

Deque ialah struktur senarai berganda untuk pelaksanaan operasi pemadaman dan pemadaman yang cekap Ia sangat sesuai untuk melaksanakan struktur data seperti baris gilir dan tindanan.

def testDeque():
list1=[x*x for x in range(101)]
delist=deque(list1) #对列表进行了一次再处理,让list1列表变成了双向链表结构
delist.append(1000)#将x添加到deque的右侧
delist.appendleft(2000)#将x添加到deque的左侧
delist.pop(1000)#移除和返回deque中最右侧的元素,如果没有元素,将会报出IndexError;
delist.popleft()#移除和返回deque中最左侧的元素,如果没有元素,将会报出IndexError;
delist.count(1)#返回deque中元素等于1的个数
delist.remove(10000)#移除第一次出现的value,如果没有找到,报出ValueError;
delist.reverse()#反转deque中的元素,并返回None;
list2=[1,3,4,5]
delist.extend(list2)#将可迭代变量iterable中的元素添加至deque的右侧
delist.extendleft(list2)#将变量iterable中的元素添加至deque的左侧,往左侧添加序列的顺序与可迭代变量iterable中的元素相反
delist.maxlen()#只读的属性,deque的最大长度,如果无解,就返回None
delist.rotate(1)#从右侧反转n步,如果n为负数,则从左侧反转
delist.clear()#将deque中的元素全部删除,最后长度为0;

(3) fungsi testDefaultdict

defaultdict ialah subkelas bagi dict jenis data terbina dalam fungsi asasnya adalah sama seperti dict, kecuali ia mengatasi kaedah __missing__(. key) dan menambah Pembolehubah default_factory objek boleh tulis dicipta.

Apabila menggunakan jenis kamus dict, jika kunci yang dirujuk tidak wujud, KeyError akan dilemparkan. Jika anda mahu nilai lalai dikembalikan apabila Kunci tidak wujud, anda boleh menggunakan defaultdict.

def testDefaultdict():
dict1= defaultdict(lambda: 'default') #Key不存在时,返回一个默认值,就可以用default,defaultdict的其他行为跟dict是完全一样的
dict1["k1"]="v1"
print(dict1["k2"])
list2= [('yellow',11),('blue',2),('yellow',3),('blue',4),('red',5),('red',10)]
dict1 = defaultdict(list)#使用list作为default_factory,很容易将一个key-value的序列转换为一个关于list的词典
for k,v in list2:
dict1[k].append(v)
print(dict1)

(4) fungsi testOrderedDict

OderedDict adalah serupa dengan kamus biasa, kecuali ia mengingati susunan unsur-unsur yang disisipkan, dan apabila melelang ke atas kamus yang dipesan, yang dikembalikan elemen Itulah susunan yang pertama kali ditambahkan. Dengan cara ini dict adalah kamus yang teratur.

Apabila menggunakan dict, kunci tidak tertib. Apabila mengulangi dict, kami tidak dapat menentukan susunan kunci. Tetapi jika anda ingin mengekalkan susunan kunci, anda boleh menggunakan OrderedDict.

def testOrderedDict():
dict1=dict([('aaa', 111), ('ddd',444),('bbb', 222), ('ccc', 333)])
print(dict1)
dict2 = OrderedDict([('ddd',444),('aaa', 111), ('bbb', 222), ('ccc', 333)])#OrderedDict的key会按照插入的顺序排列,不是key本身排序
print(dict2)
dict3 = {"banana": 33, "apple": 222, "pear": 1, "orange": 4444}
# dict sorted by key
dict4=OrderedDict(sorted(dict3.items(), key=lambda t: t[0]))
print("dict4",dict4)
# dict sorted by value
dict5=OrderedDict(sorted(dict3.items(), key=lambda t: t[1]))
print("dict5",dict5)
# dict sorted by length of key string
dict6 = OrderedDict(sorted(dict3.items(), key=lambda t: len(t[0])))
print("dict6",dict6)
print(dict6['apple'])

(5) fungsi testCounter

def testCounter():
'''counter可以支持方便、快速的计数'''
str1="abcdefgabcedergeghdjlkabcdefe" #将可迭代的字符串初始化counter
str2=Counter(str1)
print(str2) #从输出的内容来看,Counter实际上也是dict的一个子类
for k,v in str2.items():
print(k,v)
dict3 = {"banana": 33, "apple": 222, "pear": 1, "orange": 4444,"apples":2}#将dict初始化counter
dict4=Counter(dict3)
print(dict4)
print(dict4["test"])#Counter对象类似于字典,如果某个项缺失,会返回0,而不是报出KeyError;
dict5=Counter(high=9,age=33,money=-1)#将args初始化counter
print(dict5)
#elements返回一个迭代器,每个元素重复的次数为它的数目,顺序是任意的顺序,如果一个元素的数目少于1,那么elements()就会忽略它;
list1=list(dict5.elements())
print(list1)
#most_common返回一个列表,包含counter中n个最大数目的元素
#,如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会以任意顺序排列;
str1 = "abcdefgabcedergeghdjlkabcdefe"
list1=Counter(str1).most_common(3)
print(list1)
if __name__ == '__main__':
# testNamedTuple()
# testCounter()
testDefaultdict()
# testDeque()
# testOrderedDict()

Atas ialah kandungan terperinci Mari bercakap tentang Koleksi, modul terbina dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam