Python의 내장 모듈 컬렉션 소개
collections는 많은 유용한 컬렉션 클래스를 제공하는 Python의 내장 컬렉션 모듈입니다.
1.namedtuple
Python은 이진 벡터를 나타내는 데 쉽게 사용할 수 있는 불변 유형 튜플과 같은 매우 유용한 기본 유형을 많이 제공합니다.
추천 학습: Python 동영상 튜토리얼
>>> v = (2,3)
(2,3)은 벡터의 두 좌표를 나타내지만 추가 설명 없이는 이 튜플이 좌표를 나타내는 데 사용되는지 직접 확인하기 어렵다는 것을 발견했습니다.
이를 위해 클래스를 정의하는 것은 너무 까다롭습니다. 이때, namestuple이 유용합니다.
>>> from collections import namedtuple >>> Vector = namedtuple('Vector', ['x', 'y']) >>> v = Vector(2,3) >>> v.x 2 >>> v.y 3
namedtuple은 사용자 정의 튜플 객체를 생성하고 튜플 요소 수를 지정하는 함수이며, 인덱스 대신 속성을 사용하여 튜플의 요소를 참조할 수 있습니다.
이렇게 NamedTuple을 사용하면 튜플의 불변성을 가지며 속성을 기준으로 참조할 수 있어 매우 편리하게 데이터 유형을 정의할 수 있습니다.
생성된 Vector 객체의 종류를 확인할 수 있습니다.
>>> type(v) <class '__main__.Vector'> >>> isinstance(v, Vector) True >>> isinstance(v, tuple) True
마찬가지로 좌표와 반경을 사용하여 원을 표현하려는 경우 명명된 튜플을 사용하여 다음을 정의할 수도 있습니다.
>>> Circle = namedtuple('Circle', ['x', 'y', 'r']) # namedtuple('名称', [‘属性列表’])
2, deque
데이터 구조에서는 큐와 스택이 매우 중요하다는 것을 알고 있습니다. 데이터 유형, 하나는 선입선출(First In First Out), 하나는 마지막에 들어간 선출(Last In First Out)입니다. Python에서는 리스트를 사용하여 데이터를 저장할 때 인덱스로 요소에 접근하는 것은 매우 빠르지만, 리스트가 선형 저장이기 때문에 요소를 삽입하고 삭제하는 것은 매우 느리고, 데이터의 양이 많을 경우 삽입과 삭제 효율이 떨어진다. 매우 낮습니다.
Deque는 삽입 및 삭제 작업을 효율적으로 구현하기 위한 이중 연결 리스트 구조로, 큐, 스택과 같은 데이터 구조를 구현하는 데 매우 적합합니다.
>>> from collections import deque >>> deq = deque([1, 2, 3]) >>> deq.append(4) >>> deq deque([1, 2, 3, 4]) >>> deq.appendleft(5) >>> deq deque([5, 1, 2, 3, 4]) >>> deq.pop() 4 >>> deq.popleft() 5 >>> deq deque([1, 2, 3])
deque는 목록의 append()와 pop() 구현 외에도 appendleft()와 popleft()도 지원하므로 헤드에 요소를 매우 효율적으로 추가하거나 삭제할 수 있습니다.
3. defaultdict
dict 사전 유형을 사용할 때 참조된 키가 없으면 KeyError가 발생합니다. 키가 없을 때 기본값을 반환하려면 defaultdict를 사용할 수 있습니다.
>>> from collections import defaultdict >>> dd = defaultdict(lambda: 'defaultvalue') >>> dd['key1'] = 'a' >>> dd['key1'] 'a' >>> dd['key2'] # key2未定义,返回默认值 'defaultvalue'
함수를 호출하면 기본값이 반환되고, defaultdict 객체를 생성할 때 함수가 전달된다는 점에 유의하세요.
키가 존재하지 않을 때 기본값을 반환하는 것을 제외하면 defaultdict의 다른 동작은 dict와 완전히 동일합니다.
4. OrderedDict
dict를 사용할 때 키는 순서가 지정되지 않습니다. dict를 반복할 때 키의 순서를 결정할 수 없습니다.
하지만 키 순서를 유지하고 싶다면 OrderedDict를 사용할 수 있습니다.
>>> from collections import OrderedDict >>> d = dict([('a', 1), ('b', 2), ('c', 3)]) >>> d # dict的Key是无序的 {'a': 1, 'c': 3, 'b': 2} >>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) >>> od # OrderedDict的Key是有序的 OrderedDict([('a', 1), ('b', 2), ('c', 3)])
OrderedDict의 키는 키 자체가 아닌 삽입 순서로 정렬됩니다.
>>> od = OrderedDict() >>> od['z'] = 1 >>> od['y'] = 2 >>> od['x'] = 3 >>> list(od.keys()) # 按照插入的Key的顺序返回 ['z', 'y', 'x']
OrderedDict는 용량이 한도를 초과하면 가장 먼저 추가되는 FIFO(선입선출) 딕셔너리를 구현할 수 있습니다. 키가 먼저 삭제됩니다.
from collections import OrderedDict class LastUpdatedOrderedDict(OrderedDict): def __init__(self, capacity): super(LastUpdatedOrderedDict, self).__init__() self._capacity = capacity def __setitem__(self, key, value): containsKey = 1 if key in self else 0 if len(self) - containsKey >= self._capacity: last = self.popitem(last=False) print('remove:', last) if containsKey: del self[key] print('set:', (key, value)) else: print('add:', (key, value)) OrderedDict.__setitem__(self, key, value)
5. ChainMap
ChainMap은 일련의 사전을 연결하여 논리적 사전을 형성할 수 있습니다. ChainMap 자체도 dict이지만, 검색 시에는 내부 dict를 순서대로 검색하게 됩니다.
체인맵을 사용하기 가장 좋은 시기는 언제인가요? 예: 애플리케이션은 종종 매개변수를 전달해야 합니다. 매개변수는 명령줄을 통해 전달되거나 환경 변수를 통해 전달될 수 있으며 기본 매개변수를 가질 수도 있습니다. ChainMap을 사용하여 매개변수 우선순위 검색을 구현할 수 있습니다. 즉, 전달되지 않은 경우 먼저 명령줄 매개변수를 확인한 다음 환경 변수를 확인하고 그렇지 않은 경우 기본 매개변수를 사용합니다.
다음 코드는 user 및 color 두 매개변수를 찾는 방법을 보여줍니다.
from collections import ChainMap import os, argparse # 构造缺省参数: defaults = { 'color': 'red', 'user': 'guest' } # 构造命令行参数: parser = argparse.ArgumentParser() parser.add_argument('-u', '--user') parser.add_argument('-c', '--color') namespace = parser.parse_args() command_line_args = { k: v for k, v in vars(namespace).items() if v } # 组合成ChainMap: combined = ChainMap(command_line_args, os.environ, defaults) # 打印参数: print('color=%s' % combined['color']) print('user=%s' % combined['user'])
매개변수가 없으면 기본 매개변수가 인쇄됩니다.
$ python3 use_chainmap.py color=red user=guest
명령줄 매개변수가 전달되면 명령줄 매개변수가 먼저 사용됩니다.
$ python3 use_chainmap.py -u bob color=red user=bob
명령줄 매개변수와 환경 변수가 동시에 전달됩니다. , 명령줄 매개변수의 우선순위가 더 높습니다. 높음:
$ user=admin color=green python3 use_chainmap.py -u bob color=green user=bob
6, Counter
Counter는 나타나는 문자 수를 계산하는 간단한 카운터입니다.
from collections import Counter >>> s = 'abbcccdddd' >>> Counter(s) Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
Counter는 실제로 dict의 하위 클래스입니다.
7. 요약
collections 모듈은 필요에 따라 선택할 수 있는 몇 가지 유용한 컬렉션 클래스를 제공합니다.
위 내용은 Python 내장 모듈 컬렉션 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!