Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 컬렉션:단계별 가이드

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 , defaultdictChainMap .

이제 전문가처럼 Python 컬렉션 모듈을 사용하는 데 필요한 지식을 갖추게 되었습니다!

Python을 배우는 것이 기술 분야에서 경력을 쌓는 데 어떻게 도움이 되는지 알고 싶으십니까? 지금 무료 Career Karma 앱을 다운로드하고 전문 직업 코치와 상담하세요!