Heim  >  Artikel  >  Backend-Entwicklung  >  Lassen Sie uns über Collections sprechen, ein integriertes Modul von Python

Lassen Sie uns über Collections sprechen, ein integriertes Modul von Python

王林
王林nach vorne
2023-04-12 12:46:081199Durchsuche

Lassen Sie uns über Collections sprechen, ein integriertes Modul von Python

1. Modulbeschreibung

collections ist ein integriertes Modul von Python. Das sogenannte integrierte Modul bezieht sich auf das Modul In Python verpackt. Es kann direkt ohne Installation verwendet werden.

  • collections enthält einige spezielle Container, die eine weitere Option für Pythons integrierte Container bieten, wie zum Beispiel: list, dict, set, tuple .
  • namedtuple: Kann ein Tupel erstellen, das einen Namen enthält.
  • deque: Ein Container ähnlich einer Liste, der schnell Elemente am Anfang und Ende der Warteschlange hinzufügen und löschen kann.
  • OrderedDict: Eine Unterklasse von dict, die sich die Reihenfolge merken kann, in der Elemente hinzugefügt werden.
  • defaultdict: Eine Unterklasse von dict, die Funktionen aufrufen kann, die Standardwerte bereitstellen.
  • Counter: Eine Unterklasse von dict, die hashbare Objekte berechnet.

2. Tatsächlicher Code

(1) testNamedTuple-Funktion

Python bietet viele sehr nützliche Grundtypen, wie z. B. den nicht verfügbaren Variablentyp Tupel können wir es leicht verwenden, um einen binären Vektor darzustellen.

namedtuple ist eine Funktion, die ein benutzerdefiniertes Tupelobjekt erstellt, die Anzahl der Tupelelemente angibt und Attribute anstelle von Indizes verwenden kann, um auf ein Element des Tupels zu verweisen.

Auf diese Weise können wir mit benanntem Tupel auf einfache Weise einen Datentyp definieren, der die Invarianz von Tupel aufweist und auf der Grundlage von Attributen referenziert werden kann, was die Verwendung sehr bequem macht.

In diesem Beispiel verwenden wir eine dreidimensionale Koordinate x, y, z, um ein Tupelobjekt zu definieren. Es gibt drei Objektelemente, und dann kann der entsprechende Wert über den Koordinatenwert referenziert werden.

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) testDeque-Funktion

deque ist eine verallgemeinerte Implementierung von Stack und Queue, und deque ist die Abkürzung für „Double-End-Queue“.

deque unterstützt das threadsichere, speichereffiziente Einfügen und Löschen von Elementen an beiden Enden der Deque mit einer Leistung von ungefähr O(1). Obwohl die Liste auch ähnliche Operationen unterstützt, konzentriert sie sich hauptsächlich auf Operationen mit fester Länge . Optimierung, sodass eine O(n)-Zeitkomplexität für pop(0) und insert(0,v) vorliegt (wodurch sich die Position und Größe der Daten ändert).

In Datenstrukturen wissen wir, dass Warteschlangen und Stapel zwei sehr wichtige Datentypen sind, einer ist „First In, First Out“ und der andere ist „Last In, First Out“.

Wenn in Python eine Liste zum Speichern von Daten verwendet wird, ist der Zugriff auf Elemente über den Index schnell, das Einfügen und Löschen von Elementen jedoch sehr langsam, da es sich bei der Liste um einen linearen Speicher handelt Die Effizienz beim Einfügen und Löschen ist sehr gering. Sehr gering.

Deque ist eine doppelt verknüpfte Listenstruktur zur effizienten Implementierung von Einfüge- und Löschvorgängen. Sie eignet sich sehr gut zur Implementierung von Datenstrukturen wie Warteschlangen und Stapeln.

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)testDefaultdict function

defaultdict ist eine Unterklasse des integrierten Datentyps dict. Seine Grundfunktionen sind die gleichen wie dict, außer dass es eine Methode überschreibt __missing__(key) Und eine beschreibbare Objektvariable default_factory hinzugefügt.

Wenn bei Verwendung des Diktat-Wörterbuchtyps der referenzierte Schlüssel nicht vorhanden ist, wird KeyError ausgelöst. Wenn Sie möchten, dass ein Standardwert zurückgegeben wird, wenn der Schlüssel nicht vorhanden ist, können Sie defaultdict verwenden.

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) testOrderedDict-Funktion

OrderedDict ähnelt einem normalen Wörterbuch, außer dass es sich die Reihenfolge merkt, in der Elemente eingefügt werden, und wenn es über ein geordnetes Wörterbuch iteriert, gibt die Elemente in der Reihenfolge zurück, in der sie zuerst hinzugefügt wurden. Auf diese Weise ist dict ein geordnetes Wörterbuch.

Bei Verwendung von dict sind die Tasten ungeordnet. Beim Durchlaufen eines Diktats können wir die Reihenfolge der Schlüssel nicht bestimmen. Wenn Sie jedoch die Reihenfolge der Schlüssel beibehalten möchten, können Sie OrderedDict verwenden.

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) testCounter-Funktion

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()

Das obige ist der detaillierte Inhalt vonLassen Sie uns über Collections sprechen, ein integriertes Modul von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen