Python collections 모듈의 사용 방법

6867 단어 Pythoncollections
일반적으로python의collections는 데이터 집합 (예를 들어 목록list, 사전dict, 모듈tuple, 집합set) 을 저장하는 용기입니다.이 용기들은 파이썬에 내장되어 있어 직접 사용할 수 있다.이collections 모듈은 추가적이고 고성능의 데이터 형식을 제공하여 코드를 강화하고 일을 더욱 청결하고 쉽게 할 수 있습니다.
집합 모듈의 가장 인기 있는 데이터 유형과 그것들을 어떻게 사용하는지에 대한 강좌를 봅시다!

Counter


Counter()는 사전 객체의 하위 클래스입니다.Counter () 는 반복 가능한 대상 (예: 문자열, 목록, 원조) 을 매개 변수로 수신하고 카운터 사전을 되돌려줍니다.사전의 키는 대상의 유일한 원소를 훑어볼 수 있고, 키의 값은 교체 대상의 모든 유일한 원소에 대응하는 계수이다.
우선, Collections 모듈에서 Counter라는 데이터 형식을 가져옵니다.

from collections import Counter
Counter 객체를 다른 객체 클래스에 할당하는 것처럼 변수에 할당합니다.유일하게 확보해야 할 것은 매개 변수가 교체 가능한 대상이라는 것입니다.

lst = [1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 2, 1, 1]
counter = Counter(lst)
우리는 간단한 인쇄 기능, 예를 들어 print (counter) 를 사용하여 우리가 얻은 새로운 대상을 볼 수 있다. 이것은 마치 사전처럼 보인다. 다음과 같다.

Conter ({1:7,2:2:5,3:3})
키 값 키를 사용하여 계수기 항목에 접근할 수 있습니다. 아래와 같습니다.이것은 표준 Python 사전에서 요소를 추출하는 방식과 완전히 같습니다.

lst = [1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 2, 1, 1]
counter = Counter(lst)
print(counter[1]) #  7。1 7 

most_common () 함수


지금까지 Counter 객체에서 가장 유용한 기능은 most_common () 함수.Counter 객체에 적용하면 N개의 가장 흔한 요소와 계수 목록을 되돌려주고 가장 흔한 것부터 가장 흔하지 않은 것까지 순서대로 배열합니다.

lst = [1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 2, 1, 1]
counter = Counter(lst)
print(counter.most_common(2)) #  
위의 코드는 다음 메타그룹 목록을 인쇄합니다.

[(1,7),(2,5)]
각 원조의 첫 번째 요소는 목록의 유일한 원시이며, 각 원조의 두 번째 요소는 계수입니다.이것은 신속하고 간편한 방법으로 예를 들어'목록에서 가장 흔히 볼 수 있는 세 가지 요소와 그 계수'의 기능을 실현한다.
Counter 기능에 대한 자세한 내용은 공식 문서를 참조하십시오.

defaultdict


defaultdict는 일반적인 Python 사전처럼 작동하지만, 추가 보상이 있습니다.존재하지 않는 키에 접근하려고 하면 오류를 일으키지 않고 존재하지 않는 키로 새 키를 만듭니다. 기본값은 defaultdict 대상을 만들 때 매개 변수로 전달되는 데이터 형식에 따라 자동으로 설정됩니다.아래의 코드를 예시로 보십시오.

from collections import defaultdict

names_dict = defaultdict(int)
names_dict["Bob"] = 1
names_dict["Katie"] = 2
sara_number = names_dict["Sara"]
print(names_dict)
위의 예시에서 int는 기본 초기화 값으로 defaultdict 대상에 전달됩니다.다음은 각 키의 "Bob"과 "Katie"에 값을 부여합니다.그러나 마지막 줄에서 우리는 정의되지 않은 키, 즉 "Sara"키를 방문하려고 시도했다.
일반 사전에서 이것은 오류를 일으킬 것이다.defaultdict를 사용한 후 오류를 보고하지 않고 자동으로 "Sara"로 새 키 키를 만듭니다. 초기화 값은 0입니다. int 데이터 형식을 초기화 값으로 지정했기 때문입니다.
따라서 마지막 줄은 세 개의 이름과 상응하는 값을 가진 사전을 출력합니다.

defaultdict(<class 'int'>, {'Bob': 1, 'Katie': 2, 'Sara': 0})
설정 목록 형식 데이터를 키의 초기화 값으로 만들려면names_dict = defaultdict(list), 이 때 "Sara"는 빈 목록을 사용하여 초기화됩니다 [].인쇄 결과는 다음과 같습니다.

defaultdict(<class 'int'>, {'Bob': 1, 'Katie': 2, 'Sara': []})
defaultdict 기능에 대한 더 많은 정보를 알고 싶으면 공식 문서를 보십시오.

deque


deque 대기열은 컴퓨터 과학에서 가장 기본적인 데이터 구조로 선입선출(FIFO)의 원리를 따른다.간단하게 말하자면, 이것은 대기열에 추가된 첫 번째 대상도 삭제할 첫 번째 대상이어야 한다는 것을 의미한다.우리는 대기열의 앞에만 내용을 삽입할 수 있고, 대기열의 뒤에서만 내용을 삭제할 수 있으며, 대기열의 중간에 아무런 동작도 하지 않습니다.
collections 모듈에서 제공하는 deque 대상은 대기열 데이터 구조의 최적화 버전을 실현할 수 있습니다.이 기능의 주요 특징은 대기열의 크기를 유지하는 것이다. 즉, 대기열의 최대 길이를 10으로 설정하면 deque를 FIFO 원리에 따라 요소를 추가하고 삭제하여 최대 길이를 10으로 유지하는 것이다.이것은 지금까지 파이썬의 대기열 중 가장 좋은 실현이다.
우리 하나의 예부터 시작합시다.deque 대상을 만들고 1부터 10까지의 정수를 사용하여 초기화합니다.

from collections import deque

my_queue = deque(maxlen=10)

for i in range(10):
    my_queue.append(i+1)

print(my_queue)
위의 코드에서, 우리는 우선 deque를 초기화하고, 항상 최대 길이를 10으로 유지하기를 희망합니다.그 다음으로, 우리가 순환을 통해 값을 대기열에 삽입할 때.대기열을 채우는 기능은 일반 Python 목록을 사용하는 것과 동일합니다.마지막으로, 우리는 결과를 인쇄해 냈다.

deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], maxlen=10)
대기열에 maxlen=10이 있고 순환에 10개의 요소가 추가되어 있기 때문에 대기열에는 1부터 10까지의 모든 숫자가 포함되어 있습니다.이제 더 많은 숫자를 추가할 때 무슨 일이 일어날지 봅시다.

for i in range(10, 15):
    my_queue.append(i+1)

print(my_queue)
위의 코드에서, 우리는 대기열에 다른 다섯 개의 요소를 추가했는데, 숫자는 11에서 15까지이다.그러나 우리의 대기열은 하나이고 maxlen=10.따라서 새 요소를 삽입하려면 일부 요소를 삭제해야 합니다.대기열은 FIFO 지침을 따라야 하기 때문에 대기열에 가장 먼저 삽입된 처음 5개 요소인 [1, 2, 3, 4, 5]를 삭제합니다.인쇄된 문장의 결과는 다음과 같습니다.

deque([6, 7, 8, 9, 10, 11, 12, 13, 14, 15], maxlen=10)
이 기능에 대한 더 많은 정보를 알고 싶으면 공식 문서를 보십시오.

namedtuple


Python에서 일반 메타그룹을 만들 때, 그 요소는 통용되고 이름이 지정되지 않아서, 각 메타그룹 요소의 정확한 인덱스를 기억할 수 있습니다.구명 모듈namedtuple을 사용하여 이 문제를 해결할 수 있습니다.
이 namedtuple () 는 상기 모듈의 모든 위치와 일반적인 이름의 고정 이름을 가진 모듈namedtuple 대상을 되돌려줍니다.namedtuple을 사용하려면 템플릿을 만드십시오.다음 코드는namedtuple이 Person이라는 템플릿을 만듭니다. 속성은name,age,job입니다.

from collections import namedtuple

Person = namedtuple('Person', 'name age job')
템플릿을 만들면namedtuple 대상을 만들 수 있습니다.Person 템플릿을 사용하여 2명의namedtuple 대상을 만들고 인쇄합니다.

Person = namedtuple('Person', 'name age job')

Mike = Person(name='Mike', age=30, job='Data Scientist')
Kate = Person(name="Kate", age=28, job='Project Manager')

print(Mike)
print(Kate)
위의 코드는 매우 간단하다.우리는namedtuple 템플릿의 모든 속성을 사용해서'인원'을 초기화합니다. 나중에 Mike나 Kate를 사용하여 인덱스를 사용하지 않고 원조 요소를 사용할 수 있습니다.위의 인쇄 구문은 다음과 같은 결과를 제공합니다.

Person(name='Mike', age=30, job='Data Scientist')
Person(name='Kate', age=28, job='Project Manager')
따라서namedtuple은 더욱 쉽게 사용할 수 있고 원조 대상의 조직에 더욱 적합하며 가독성도 더욱 강하다.
namedtuple의 기능에 대해 더 많이 알고 싶으면 공식 문서를 보십시오.

OrderedDict


원문에서collections 모듈의 질서정연한 사전 구조를 소개하지 않았기 때문에Ordered Dict는 매우 중요하기 때문에 이 부분은 큰 강에서 수동으로 추가되었다.
Python 3.5 및 이전 버전에서 Python의 사전dict는 무질서합니다.만약 키 값 A가 사전에 삽입된다면, 키 값 B가 사전에 삽입되지만, 사전의 키 목록을 인쇄할 때, B가 A 앞에 있을 수 있음을 발견할 수 있습니다.무질서 사전의 경우, 사전을 인쇄할 때마다 요소를 표시하는 순서가 다르다.만약 당신의 Python 버전이 비교적 오래되었다면,collections 모듈에서 제공하는 Ordered Dict를 빌려 질서정연한 사전을 실현해야 합니다.
OrderedDict는 정상적인 사전과 유사하지만 요소가 삽입된 순서를 기억합니다.질서정연한 단어 사전에서 교체될 때, 원소를 되돌리는 순서는 원소를 처음 추가하는 순서에 따라 진행된다.원소가 삭제되었을 때, 순서를 정한 사전은 순서를 유지한다.그러나 새 요소가 추가되면 끝에 추가됩니다.
OrderedDict 구현 방식은 다음과 같습니다.

dd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
# key 
od_by_key = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[0]))
print(od_by_key)
# value 
od_by_value = collections.OrderedDict(sorted(dd.items(),key=lambda t:t[1]))
print(od_by_value)
# 
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
Python collections 모듈에 대한 지식을 배웠습니까?
이상은 Python collections 모듈의 사용에 대한 상세한 내용입니다. Python collections 모듈에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기