Python 컬렉션 모듈: 카운터, ChainMap, Deque 및 Tuple

게시 됨: 2020-12-01

Python Collections 모듈은 Lists, Tuples, Sets 및 Dictionaries와 같은 스톡 컨테이너의 기능을 확장하는 컨테이너 데이터 유형 세트를 제공합니다. 이러한 특수 컨테이너를 사용하면 스톡 컨테이너의 기능뿐만 아니라 특정 작업에 매우 편리한 몇 가지 추가 방법도 있습니다.

이 튜토리얼을 마치면 다음에 대한 지식을 갖게 될 것입니다.

  • 컬렉션 모듈이란 무엇입니까?
  • 다음과 같은 다양한 기능:
  1. 카운터
  2. 체인맵
  3. 데크
  4. 명명된 튜플
  • 작업 예

Collections 모듈은 Python에 사전 설치되어 제공되므로 pip 설치할 필요가 없습니다. 가져오기만 하면 바로 사용할 수 있습니다. 가장 많이 사용하는 기능에 대해 자세히 알아보겠습니다.

세계 최고의 대학에서 데이터 과학배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.

필독: 실세계의 매혹적인 Python 응용 프로그램

목차

카운터

Counter Collections 모듈에서 가장 쉽게 사용하고 가장 유용한 기능입니다. Counter는 Python에서 사전 클래스의 하위 클래스입니다. iterable(문자열, 튜플, 목록 등)에서 각 요소의 발생 횟수를 계산하고 사전에 저장합니다. 사전 키는 iterable의 고유한 요소이고 값은 해당 요소의 개수입니다.

몇 가지 예를 들어 시도해 보겠습니다.

컬렉션 가져오기
마블 = '나쁜 울버린이 불쌍한 아이언맨을 괴롭히는 나쁜 울버린이 불쌍한 아이언맨'
Marvel_count = collections.Counter(Marvel.split())

#산출:
Counter({ '나쁜' : 3 ,
'철' : 2 ,
'남자' : 2 ,
'나쁨' : 2 ,
'울버린' : 2 ,
'왕따' : 1 })

보시다시피, 모든 요소의 발생을 계산하고 사전에 넣습니다. 이것은 모든 유형의 iterable에서 사용할 수 있습니다. 이제 모든 방법이 무엇인지 봅시다.

Marvel_count[ '나쁜' ]
#>> 3

Marvel_count.values()
#>> dict_values([3, 2, 1, 2, 2, 2])

Marvel_count.keys()
#>> dict_keys(['나쁜', '울버린', '왕따', '철', '남자', '나쁜'])

most_common(n) 메서드는 카운트의 내림차순으로 정렬된 n개의 가장 일반적인 요소 목록을 반환합니다.

Marvel_count.most_common( 2 )
#>> [('나쁜', 3), ('울버린', 2)]

체인맵

ChainMap 은 단일 보기, 즉 ChainMap 개체 자체에서 액세스하고 업데이트할 수 있도록 많은 사전의 단일 보기를 만드는 데 사용됩니다. 이러한 ChainMaps는 실제 사전에 대한 참조로만 구성되며 업데이트는 실제 사전 자체에서도 수행됩니다.

ChainMap은 딕셔너리 클래스의 확장이므로 모든 딕셔너리 메서드와 함께 우리가 다룰 몇 가지 추가 메서드가 지원됩니다.

dic1 = { 'a' : 1 , 'b' : 2 }
dic2 = { 'b' : 3 , 'c' : 4 } Dic3 = { 'b' : 9 , 'd' : 4 }
chain1 = 컬렉션.ChainMap(dic2, dic1)
체인1

위의 코드에서 우리는 두 개의 사전 dic1과 dic2를 정의하고 ChainMap 객체에 넣습니다.

#산출:
ChainMap({ 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 })

보시다시피, dic2바로 이 순서dic1 과 '연결'되어 있습니다. 본질적으로 dic2–>dic1 과 같이 dic2가 dic1에 연결되는 것을 상상할 수 있습니다 . 따라서 'b' 키를 검색하면 dic2인 첫 번째 매핑에서 먼저 검색하고 키를 찾지 못하면 다음 매핑으로 이동합니다.

따라서 어떤 매핑을 먼저 검색할지 결정하기 위해서는 ChainMap의 순서가 중요합니다. 행동으로 봅시다.

체인1[ 'b' ]
#>> 3

위의 ChainMap이 두 사전에 모두 'b' 키를 가지고 있음을 알 수 있습니다. 따라서 'b' 키를 검색하면 dic2인 첫 번째 매핑을 검색하고 값을 반환합니다.

맵 속성

지도 속성 ChainMap은 검색 순서대로 매핑 목록을 반환합니다. 즉, dic2가 지도에서 첫 번째이므로 가장 먼저 검색되는 식입니다.

chain1.maps
#>> [{'b': 3, 'c': 4}, {'a': 1, 'b': 2}]

마찬가지로 키와 값을 확인할 수 있습니다.

목록(chain1.keys())
#>> ['a', 'c', 'b']

목록(체인1.값())
#>> [1, 4, 3]

보시다시피 고유 키와 값만 표시됩니다.

new_child(m=없음)

new_child() 메서드는 ChainMap에 새 맵을 추가하는 데 사용됩니다. 이 메서드는 새 맵을 첫 번째 맵으로 사용하고 나머지 맵이 뒤따르는 새 ChainMap을 반환합니다. m이 지정되면 첫 번째 맵이 되고, 그렇지 않으면 빈 사전이 첫 번째 맵으로 추가됩니다.

chain1.new_child(dic3)
chain1.maps

#산출:
[{ 'b' : 9 , 'd' : 4 }, { 'b' : 3 , 'c' : 4 }, { 'a' : 1 , 'b' : 2 }]

보시다시피 처음에 dic3을 추가하고 새로운 ChainMap 객체를 반환했습니다.

뒤집힌

ChainMap의 순서를 변경하는 방법이 궁금할 것입니다. 이는 ChainMap을 역방향으로 반복하기 위해 반복자를 반환하는 reversed 함수를 사용하여 달성할 수 있습니다. 실제로 이것을 봅시다.

이제 'b' 키가 모든 맵에 있습니다. ChainMap의 첫 번째 맵에는 값이 9인 키 'b'가 있습니다.

체인1[ 'b' ]
#>> 9

역방향으로 반복하면 어떻게 되는지 봅시다.

chain1.maps = 반전(chain1.maps)
체인1[ 'b' ]
#>> 2

반전된 함수는 매핑을 실제로 반전시키지 않고 반전된 반복자를 제공할 뿐입니다.

읽기: Python 자습서

데크

Deque( 'deck' 으로 발음 )는 목록의 확장이지만 이중으로 끝나는 것입니다. Deque는 Double Ended Queue의 약자입니다. 모든 작업이 오른쪽에 있는 목록과 달리 Deque의 양쪽 끝에 요소를 효율적으로 제거/팝업 및 추가할 수 있기 때문입니다.

deque(iterable, maxlen) 는 iterable을 가져와서 deque 객체를 반환합니다. 또한 요소 수의 상한을 결정하는 maxlen 매개변수가 있습니다. 지정하지 않으면 deque가 무한정 커질 수 있습니다. 그 빠른 방법을 살펴 보겠습니다.

deq = collections.deque([ 1 , 2 , 3 , 4 , 5 ], maxlen= 6 )
deq.appendleft( 8 )

#산출:
데크([ 8 , 1 , 2 , 3 , 4 , 5 ])

보시다시피, appendleft 메서드를 호출하면 왼쪽 끝에 요소가 추가됩니다. 또한 maxlen을 6으로 초기화하여 현재 도달한 값이므로 다른 요소를 추가하면 "StopIterationError"가 발생합니다.

이제 popleft 를 사용하여 가장 왼쪽에 있는 요소를 제거해 보겠습니다 .

deq.popleft()
#>> 8

remove를 사용하여 값으로 특정 요소를 제거할 수도 있습니다 .

deq.remove( 5 )
#>> 데크([1, 2, 3, 4])

참고: deque에 없는 요소로 remove 메서드를 호출하면 "ValueError"가 발생합니다.

insert(index, element) 를 사용하여 지정된 인덱스에 모든 요소를 ​​삽입할 수 있습니다 .

deq.insert( 2 , 7 )
#>> 데크([1, 2, 7, 3, 4])

Deque는 reverse 메소드를 호출하여 되돌릴 수 있습니다.

deq.reverse()
#>> 데크([4, 3, 7, 2, 1])


Deque는 또한 회전 방법 을 사용하여 시계 방향 또는 시계 반대 방향으로 회전할 수 있습니다 .

#시계방향deq.rotate( 2 )#>> 데크([2, 1, 4, 3, 7])

#반시계방향deq.rotate( -2 )#>> 데크([4, 3, 7, 2, 1])

명명된 튜플

namedtuple() 은 Python의 일반적인 튜플 객체를 크게 향상시킨 것입니다. Named Tuple을 사용하면 위치가 아닌 이름으로 요소를 인덱싱할 수 있습니다. 명명된 튜플은 테이블 이름이 튜플 이름이고 열 이름이 인덱스 이름인 테이블로 생각할 수 있습니다. Named Tuple은 기본적으로 더 쉽게 액세스하고 더 읽기 쉬운 코드를 위해 각 요소에 의미를 할당합니다.

몇 가지 예를 들어 어떻게 작동하는지 이해합시다.

성능 = collections.namedtuple( 'Employee_Rating' , [ 'Q1' , 'Q2' , 'Q3' , 'Q4' ])

위의 코드에서 우리는 "Employee_Rating"이라는 이름의 Named Tuple 객체 "Performance"를 정의했으며, 필드 이름은 "Q1", "Q2", "Q3" 및 "Q4"로 직원의 분기별 평가를 저장합니다. Employee_Rating의 2개의 명명된 튜플 항목을 만들어 보겠습니다.

라훌 = 성능( 3 , 4 , 3.5 , 4.5 )
키트 = 성능( 4 , 4.5 , 4 , 4.5 )

#산출:
Employee_Rating(Q1= 4 , Q2= 4.5 , Q3= 4 , Q4= 4.5 )
Employee_Rating(Q1= 3 , Q2= 4 , Q3= 3.5 , Q4= 4.5 )


이제 2개의 항목을 만들었으므로 인덱스 이름으로 액세스할 수 있습니다.

ankit.Q1
#>> 4

ankit.Q3 > 라훌.Q3
#>> 사실


새 항목을 추가하거나 새 명명된 튜플 개체를 만들기 위해 _make() 메서드를 사용할 수 있습니다.

밀크하 = 퍼포먼스._make([ 4 , 5 , 5 , 4.5 ])
밀카

#산출:
Employee_Rating(Q1= 4 , Q2= 5 , Q3= 5 , Q4= 4.5 )

명명된 튜플 에서 _replace 메서드 를 사용하여 요소를 편집할 수 있습니다 .

라훌._replace(Q1= 2 )

#산출:
Employee_Rating(Q1= 2 , Q2= 4 , Q3= 3.5 , Q4= 4.5 )

가기 전에

Collections 모듈에는 OrderedDict, defaultdict, UserList, UserString, UserDict와 같은 몇 가지 유용한 기능이 더 있습니다. 이 튜토리얼에서 논의한 기능을 손에 넣으십시오. 이러한 컨테이너 유형은 삶을 더 쉽게 만들어 줄 뿐만 아니라 작성하는 코드의 품질을 향상시킵니다.

파이썬, 데이터 사이언스에 대해 배우고 싶다면 일하는 전문가를 위해 만들어졌으며 10개 이상의 사례 연구 및 프로젝트, 실용적인 실습 워크샵, 업계 전문가와의 멘토링을 제공하는 IIIT-B & upGrad의 데이터 과학 경영자 PG 프로그램을 확인하십시오. , 업계 멘토와 1:1, 최고의 기업과 400시간 이상의 학습 및 취업 지원.

컬렉션 모듈이란 무엇이며 어떻게 유용합니까?

Python의 컬렉션 모듈은 여러 유형의 컨테이너를 지원합니다. 컨테이너는 다양한 항목을 저장하고 포함된 객체를 검색하고 반복하는 수단을 제공하는 데 사용되는 객체입니다. Tuple, List, Dictionary 및 더 많은 내장 컨테이너를 사용할 수 있습니다. 또한 Collections 모듈에는 표준 Python 컨테이너보다 훨씬 우수한 namedtuple(), deque, OrderedDict, counter 등과 같은 고도로 전문화되고 효율적인 컨테이너 데이터 유형이 있습니다.

컬렉션 모듈은 Python에 필요한 주제입니까?

네, 컬렉션 모듈은 파이썬을 배울 때 꼭 필요한 주제입니다. 개체 수 계산, 대기열 및 스택 구성, 사전의 누락된 키 관리 등이 Python의 컬렉션 모듈을 사용하여 모두 가능합니다. 컬렉션의 데이터 유형과 클래스는 효율적이고 Pythonic하게 생성됩니다. 그것들은 Python 프로그래밍 경력에 매우 유용하므로 이 컬렉션 모듈에 대해 배우는 데 시간과 노력을 기울일 가치가 있습니다. 컬렉션 모듈의 컨테이너는 비즈니스 수준 프로젝트 및 모델에 매우 유용할 수 있으며 향상된 최적화 및 실행 속도를 통해 일반 Python 컨테이너의 유용성을 크게 추가합니다.

컬렉션 모듈에 있는 데이터 유형은 무엇입니까?

컬렉션 모듈에는 deque, defaultdict, namedtuple, OrderedDict, Counter, ChainMap, UserDict, UserList, UserString 등과 같은 여러 데이터 유형이 있습니다. 이러한 데이터 유형은 다음 중 하나에서 항목 추가 및 제거와 같은 다양한 이유로 사용할 수 있습니다. 시퀀스의 끝, 누락된 키에 대한 기본값을 구성하고 자동으로 사전에 추가합니다. 이러한 데이터 유형은 색인으로 항목에 액세스하는 기능을 유지하면서 이름으로 항목에 액세스할 수 있는 명명된 필드를 제공하고, 시퀀스 또는 반복 가능한 고유 항목을 계산하고, 여러 매핑을 단일 사전 개체로 처리하는 등 도움이 될 수 있습니다.