Python에는 목록, 튜플, 집합 및 사전의 네 가지 데이터 수집 유형이 있습니다. 컬렉션 Python 모듈은 다음을 포함한 추가 옵션을 제공합니다. namedtuple
, Counter
, defaultdict
및 ChainMap
.
Python은 목록, 튜플, 집합 및 사전의 네 가지 컬렉션 데이터 유형을 제공합니다. 이러한 각 데이터 유형은 특정 상황에서 유용합니다.
예를 들어 목록을 수정할 수 있으므로 학생 이름의 발전하는 목록을 저장하는 데 사용할 수 있습니다. 또는 절대 변하지 않을 아이스크림 맛 목록을 저장하고 싶다고 가정해 보십시오. 내용을 수정할 수 없는 튜플이 더 적절할 수 있습니다.
종종 Python에서 작업할 때 이러한 데이터 유형이 원하는 모든 기능을 제공하지 않는다는 것을 알 수 있습니다. 다행히도 데이터 컬렉션과 관련된 고급 기능에 액세스하는 데 사용할 수 있는 Python 모듈이 있습니다. 바로 Python 컬렉션 모듈입니다.
Python 컬렉션 모듈은 기본 제공 컬렉션 옵션의 기능을 개선하고 개발자가 데이터 구조로 작업할 때 더 많은 유연성을 제공하기 위해 만들어졌습니다. 이 가이드에서는 Python 컬렉션 모듈의 기본 사항을 분석하고 모듈에서 가장 일반적으로 사용되는 4가지 데이터 구조를 탐색합니다.
컬렉션 리프레셔
컬렉션은 데이터를 저장하는 데 사용할 수 있는 컨테이너 데이터 유형입니다. 앞에서 설명한 것처럼 컬렉션은 목록, 집합, 튜플 및 사전을 저장할 수 있습니다. 이러한 각 데이터 유형에는 고유한 특성이 있습니다.
목록
목록은 시간이 지남에 따라 변경될 수 있는 데이터를 저장하는 데 사용할 수 있는 순서가 지정된 변경 가능한 데이터 유형입니다. 예를 들어 기존 목록 항목을 추가, 제거 및 업데이트할 수 있습니다. 목록에는 중복 값이 포함될 수 있습니다. 색인 번호를 사용하여 목록 내의 개별 항목을 참조할 수 있습니다.
다음은 Python에서 목록을 선언하는 예입니다.
참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.
부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.
sandwiches = ["Cheese", "Ham", "Tuna", "Egg Mayo"]
튜플
튜플은 순서가 있고 변경할 수 없는 데이터 유형입니다. 튜플에는 중복 값이 포함될 수 있지만 해당 값은 변경할 수 없습니다. 튜플은 중괄호로 둘러싸여 있습니다.
다음은 Python 튜플의 예입니다.
sandwiches = ("Cheese", "Ham", "Tuna", "Egg Mayo")
세트
집합은 순서가 지정되지 않은 목록입니다. 대괄호를 사용하여 선언됩니다. 목록과 달리 세트에는 색인 값이 없으며 중복 항목을 포함할 수 없습니다.
다음은 Python 집합의 예입니다.
sandwiches = {"Cheese", "Ham", "Tuna", "Egg Mayo"}
사전
사전은 인덱싱할 수 있는 정렬되지 않고 변경 가능한 데이터 유형입니다. 사전의 각 항목에는 키와 값이 있습니다.
다음은 Python 사전 항목의 예입니다.
sandwich = { "name": "Cheese", "price": 8.95 }
이 네 가지 데이터 유형은 Python에서 광범위하게 사용됩니다. 그러나 Python 컨테이너 데이터 유형으로 고급 작업을 수행하려는 경우 Python 컬렉션 모듈을 고려해 볼 가치가 있습니다.
컬렉션 모듈
Python 컬렉션 모듈에는 Python의 내장 컨테이너에 추가하거나 대안으로 사용할 수 있는 여러 특수 데이터 구조가 포함되어 있습니다. collections
때문에 모듈이므로 프로그램으로 가져와야 합니다. 그러나 Python에 내장되어 있으므로 보조 라이브러리를 가져올 필요가 없습니다.
이 기사에서는 컬렉션 모듈에서 가장 일반적으로 사용되는 네 가지 데이터 구조에 중점을 둘 것입니다. 다음과 같습니다.
- 카운터
- 명명된 튜플
- defaultdict
- 체인맵
카운터
Counter()
사전 개체의 하위 클래스이며 해시 가능한 개체를 계산하는 데 사용할 수 있습니다. Counter()
함수는 iterable을 인수로 받아 사전을 반환합니다.
1월 샌드위치 주문 목록이 있고 그 달에 몇 개의 BLT 샌드위치를 판매했는지 알고 싶다고 가정해 보겠습니다. Counter()
를 사용할 수 있습니다. 이를 수행하는 기능입니다.
다음은 사용할 코드의 예입니다.
from collections import Counter sandwich_sales = ["BLT", "Egg Mayo", "Ham", "Ham", "Ham", "Cheese", "BLT", "Cheese"] our_counter = Counter(sandwich_sales) print(our_counter["BLT"])
우리 프로그램은 다음을 반환합니다:2
.
코드에서 많은 일이 진행 중이므로 분해해 보겠습니다.
첫 번째 줄에서 Counter
를 가져옵니다. collections
의 함수 . collections
때문에 이 작업을 수행해야 합니다. 모듈이다. 그런 다음 sandwich_sales
를 선언합니다. 1월에 판매한 샌드위치 수를 저장하는 array입니다.
다음 줄에서 our_counter
를 선언합니다. 변수에 할당하고 Counter(sandwich_sales)
함수. 이를 통해 Counter()
의 결과에 액세스할 수 있습니다. our_counter
를 참조할 때의 함수 .
마지막으로 print(our_counter[“BLT”])
를 사용합니다. 사전에 있는 샌드위치가 BLT
와 같은지 출력하려면 . 이 경우 답은 2
였습니다. .
명명된 튜플
namedtuple()
메서드는 튜플의 각 위치에 대한 이름이 있는 튜플을 반환합니다. 표준 튜플로 작업할 때 개별 값에 액세스할 수 있는 유일한 방법은 튜플의 인덱스 번호를 참조하는 것입니다. 큰 튜플로 작업하는 경우 빠르게 혼동될 수 있습니다.
다음은 namedtuple()
을 사용하는 예입니다. 샌드위치의 이름과 가격을 저장하는 방법:
from collections import namedtuple Sandwich = namedtuple("Sandwich", "name, price") first_sandwich = Sandwich("Chicken Teriyaki", "$3.00") print(first_sandwich.price)
우리 프로그램은 다음을 반환합니다:$3.00
.
코드에서 많은 일이 진행 중이므로 분해해 보겠습니다. 첫 번째 줄에서 namedtuple
을 가져옵니다. collections
에서 모듈을 사용하여 코드에서 사용할 수 있습니다.
다음 줄에서 이름이 Sandwich
인 샌드위치 튜플을 만듭니다. , 이름과 가격이라는 두 개의 헤더를 할당합니다. 이를 통해 이 헤더를 사용하여 나중에 코드에서 튜플의 값을 참조할 수 있습니다. 다음으로 first_sandwich
라는 변수를 선언합니다. , 튜플 항목 Chicken Teriyaki
를 할당했습니다. .
마지막으로 first_sandwich
의 가격을 출력합니다. , 이 경우 $3.00입니다.
namedtuple()
을 만들 수도 있습니다. 목록을 사용하여. 다음은 예입니다.
second_sandwich = Sandwich._make(["Spicy Italian", "$3.75"]) print(second_sandwich.name)
우리 프로그램은 다음을 반환합니다:Spicy Italian
. 이 예에서는 _make
를 사용합니다. Sandwich
외에도 목록을 namedtuple()
로 바꾸려는 것을 나타내는 항목 .
기본 사전
defaultdict()
메서드를 사용하여 존재하지 않는 객체에 액세스하려고 할 때 KeyError를 발생시키지 않는 Python 사전을 만들 수 있습니다. 대신, 존재하지 않는 개체를 참조하는 경우 사전은 사전 정의된 데이터 유형을 반환합니다.
다음은 defaultdict()
를 사용하는 예입니다. str
을 반환할 사전을 선언하는 메소드 존재하지 않는 개체를 참조하는 경우:
from collections import defaultdict sandwiches = defaultdict(str) sandwiches[0] = "Ham and Cheese" sandwiches[1] = "BLT" print(sandwiches[1]) print(sandwiches[2])
우리 프로그램은 다음을 반환합니다:
BLT // This is a blank line
위의 예에서 인덱스 위치 에 값이 있는 사전을 만들었습니다. 및
1
. sandwiches[1]
를 인쇄할 때 , 사전에 값이 저장되어 있음을 알 수 있습니다. 그러나 인덱스 값 2
와 관련된 항목을 인쇄하려고 할 때 , 해당 인덱스에 할당된 값이 없기 때문에 프로그램은 빈 줄을 반환합니다.
표준 사전에서 우리 프로그램은 KeyError를 반환합니다. 그러나 defaultdict
를 사용했기 때문에 , 우리 프로그램은 사전을 만들 때 지정한 데이터 유형을 대신 반환합니다. 위의 예에서 유효하지 않은 키는 str
을 반환해야 한다고 명시했습니다. 하지만 정수 또는 기타 유효한 데이터 유형을 반환하도록 코딩할 수도 있습니다.
이 기능은 여러 항목에 대한 작업을 수행하기 위해 사전으로 작업할 때 유용할 수 있지만 작업이 각 항목에 대해 작동하지 않을 수 있습니다. 프로그램이 오류를 반환하도록 하는 대신 defaultdict()
기본값을 반환하고 계속 실행합니다.
체인맵
ChainMap()
메소드는 둘 이상의 사전을 결합하는 데 사용됩니다. 사전 목록을 반환합니다. 예를 들어 표준 메뉴와 비밀 메뉴라는 두 개의 메뉴를 하나의 큰 메뉴로 병합하려는 경우를 가정해 보겠습니다. 이를 위해 ChainMap()
을 사용할 수 있습니다. 기능.
다음은 ChainMap()
을 사용하는 예입니다. 표준 및 비밀 메뉴 병합:
from collections import ChainMap standard_menu = { "BLT": "$3.05", "Roast Beef": "$3.55", "Cheese": "$2.85", "Shrimp": "$3.55", "Ham": "$2.85" } secret_menu = { "Steak": "$3.60", "Tuna Special": "$3.20", "Turkey Club": "$3.20" } menu = ChainMap(standard_menu, secret_menu) print(menu)
코드는 다음과 같이 두 메뉴를 병합한 ChainMap 개체를 반환합니다.
ChainMap({'BLT': '$3.05', 'Roast Beef': '$3.55', 'Cheese': '$2.85', 'Shrimp': '$3.55', 'Ham': '$2.85'}, {'Steak': '$3.60', 'Tuna Special': '$3.20', 'Turkey Club': '$3.20'})
키 이름을 참조하여 ChainMap의 각 값에 액세스할 수 있습니다. 예를 들어, 다음은 BLT 샌드위치의 가격을 검색할 수 있는 코드 행입니다.
print(menu["BLT"])
우리 프로그램 반환:$3.05
또한 ChainMap에 포함된 사전이 업데이트될 때 ChainMap이 업데이트된다는 점에 유의하는 것이 중요합니다. 따라서 standard_menu
에서 값을 변경하면 또는 secret_menu
사전에서 ChainMap 객체도 업데이트됩니다. 다음은 예입니다.
print(menu) standard_menu["BLT"] = "$3.10" print(menu)
코드 반환:
ChainMap({'BLT': '$3.10', 'Roast Beef': '$3.55', 'Cheese': '$2.85', 'Shrimp': '$3.55', 'Ham': '$2.85'}, {'Steak': '$3.60', 'Tuna Special': '$3.20', 'Turkey Club': '$3.20'})
보시다시피 standard_menu
에서 가격을 변경했기 때문에 BLT의 가격이 $3.05에서 $3.10로 변경되었습니다. 사전.
ChainMap 개체에는 개체에서 키 또는 값을 검색하는 데 사용할 수 있는 두 가지 기능도 포함되어 있습니다. keys()
를 사용하여 이를 설명할 수 있습니다. 및 values()
행동 양식. 이 메서드는 데이터의 키(특정 값을 참조하는 데 사용할 수 있음)와 할당된 값을 반환합니다.
print(list(menu.keys())) print(list(menu.values()))
코드는 다음을 반환합니다.
['Steak', 'Tuna Special', 'Turkey Club', 'BLT', 'Roast Beef', 'Cheese', 'Prawn', 'Ham'] ['$3.60', '$3.20', '$3.20', '$3.05', '$3.55', '$2.85', '$3.55', '$2.85']
우리의 코드는 keys()
를 사용할 때 ChainMap 객체에 있는 각 항목의 키와 값을 반환했습니다. 및 values()
위의 방법.
또한 new_child()
를 사용하여 ChainMap 객체에 새 사전을 추가할 수 있습니다. 방법. 샌드위치 셰프가 테스트 메뉴에서 새로운 샌드위치를 시험해 보고 그 중 두 개를 새 메뉴에 추가하려고 한다고 가정해 보겠습니다. 이 목표를 달성하기 위해 다음 코드를 사용할 수 있습니다.
test_menu = { "Veggie Deluxe": "$3.00", "House Club Special": "$3.65" } new_menu = menu.new_child(test_menu) print(new_menu)
코드는 다음과 같이 사전 시작 부분에 새로운 샌드위치와 함께 업데이트된 ChainMap을 반환합니다.
ChainMap({'Veggie Deluxe': '$3.00', 'House Club Special': '$3.65'}, {'BLT': '$3.05', 'Roast Beef': '$3.55', 'Cheese': '$2.85', 'Shrimp': '$3.55', 'Ham': '$2.85'}, {'Steak': '$3.60', 'Tuna Special': '$3.20', 'Turkey Club': '$3.20'})
결론
Python 컬렉션 모듈을 사용하여 Python에서 제공하는 내장 컬렉션을 확장하고 사용자 지정 데이터 구조 메서드에 액세스할 수 있습니다. 이것은 목록이나 튜플과 같은 컬렉션 데이터 유형으로 작업하려고 하지만 기본(또는 plain
) 파이썬.
이 가이드에서는 예제를 사용하여 Python에서 컬렉션을 사용하는 방법을 분석하고 라이브러리에서 제공하는 4가지 주요 메서드인 Counter
에 대해 논의했습니다. , namedtuple
, defaultdict
및 ChainMap
.
이제 전문가처럼 Python 컬렉션 모듈을 사용하는 데 필요한 지식을 갖추게 되었습니다!
Python을 배우는 것이 기술 분야에서 경력을 쌓는 데 어떻게 도움이 되는지 알고 싶으십니까? 지금 무료 Career Karma 앱을 다운로드하고 전문 직업 코치와 상담하세요!