collections은 Python의 내장 모듈입니다. 소위 내장 모듈은 모듈이 Python 내부에 패키지되어 설치 없이 바로 사용할 수 있다는 의미입니다.
Python은 이진 벡터를 나타내는 데 쉽게 사용할 수 있는 불변 유형 튜플과 같은 매우 유용한 기본 유형을 많이 제공합니다.
namedtuple은 사용자 정의 튜플 객체를 생성하고 튜플 요소의 수를 지정하는 함수이며, 인덱스 대신 속성을 사용하여 튜플의 요소를 참조할 수 있습니다.
이렇게 NamedTuple을 사용하면 튜플의 불변성을 가지며 속성을 기준으로 참조할 수 있는 데이터 유형을 쉽게 정의할 수 있어 매우 편리하게 사용할 수 있습니다.
이 예제에서는 튜플 객체를 정의하기 위해 3차원 좌표 x, y, z를 사용하며, 3개의 객체 요소가 있으며, 좌표 값을 통해 해당 값을 참조할 수 있습니다.
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)
deque는 스택과 큐의 일반화된 구현이고, deque는 "Double-End Queue"의 약어입니다.
deque는 대략 O(1) 성능으로 deque의 양쪽 끝에서 스레드로부터 안전하고 메모리 효율적인 요소 삽입 및 삭제를 지원합니다. list도 유사한 작업을 지원하지만 주로 고정 길이 작업을 최적화하므로 팝이 더 쉬워집니다. (0)과 insert(0,v)(데이터의 위치와 크기를 변경함)의 시간 복잡도는 O(n)입니다.
데이터 구조에서 우리는 큐와 스택이 두 가지 매우 중요한 데이터 유형이라는 것을 알고 있습니다. 하나는 선입선출이고 다른 하나는 후입선출입니다.
파이썬에서는 리스트를 사용하여 데이터를 저장할 때 인덱스로 요소에 접근하는 것은 매우 빠르지만, 리스트는 선형 저장이기 때문에 요소를 삽입하고 삭제하는 것은 매우 느리고, 데이터의 양이 많을 경우 삽입과 삭제의 효율성이 떨어집니다. 매우 낮습니다.
Deque는 삽입 및 삭제 작업을 효율적으로 구현하기 위한 이중 연결 리스트 구조로, 큐, 스택과 같은 데이터 구조를 구현하는 데 매우 적합합니다.
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;
defaultdict는 내장 데이터 유형 dict의 하위 클래스입니다. 기본 기능은 __missing__(key) 메서드를 재정의하고 쓰기 가능한 개체 변수 default_factory를 추가한다는 점을 제외하면 dict와 동일합니다.
dict 사전 유형을 사용할 때 참조된 키가 존재하지 않으면 KeyError가 발생합니다. 키가 없을 때 기본값을 반환하려면 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)
OrderedDict는 요소가 삽입된 순서를 기억하고 정렬된 사전을 반복할 때 반환된 요소가 처음 추가된 순서대로 있다는 점을 제외하면 일반 사전과 유사합니다. 이런 식으로 dict는 순서가 지정된 사전입니다.
dict를 사용할 때 키는 순서가 지정되지 않습니다. 사전을 반복할 때 키의 순서를 결정할 수 없습니다. 그러나 키 순서를 유지하려면 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'])
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()
위 내용은 Python의 내장 모듈인 컬렉션에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!