일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 소프트웨어공학
- kotlin
- 고전역학
- 시스템
- 리눅스
- 자바
- 웹 크롤링
- 자바네트워크
- Spring boot
- JVM
- python
- write by chatGPT
- write by GPT-4
- jpa
- 코틀린
- flet
- 데이터베이스
- 역학
- oracle
- 인프라
- 유닉스
- Java
- NIO
- 자바암호
- Database
- 파이썬
- GPT-4's answer
- chatGPT's answer
- spring data jpa
- android
- Today
- Total
Akashic Records
3.5 컬렉션 모듈 본문
파이썬의 컬렉션 모듈은 다양한 고급 컨테이너 유형을 제공합니다.
이 모듈에는 namedtuple, deque, Counter, OrderedDict, defaultdict, ChainMap, UserDict, UserList, UserString 등이 포함되어 있습니다. 여기서는 가장 자주 사용되는 컨테이너 유형에 대한 설명과 예시 코드를 제공하겠습니다.
namedtuple: 튜플의 서브 클래스로, 필드 이름이 있는 튜플을 만듭니다. 이를 통해 코드를 더 명확하게 만들 수 있습니다.
예시 코드 1 - namedtuple:
from collections import namedtuple
# namedtuple 정의
Person = namedtuple("Person", ["name", "age", "gender"])
# namedtuple 인스턴스 생성
person = Person("John", 30, "male")
print(person) # 출력: Person(name='John', age=30, gender='male')
print(person.name) # 출력: John
print(person.age) # 출력: 30
print(person.gender) # 출력: male
deque: 양쪽 끝에서 빠르게 추가 및 제거를 할 수 있는 스택과 큐를 일반화한 형태의 자료구조입니다.
예시 코드 2 - deque:
from collections import deque
# deque 생성
my_deque = deque([1, 2, 3, 4])
# deque에 요소 추가
my_deque.append(5) # 오른쪽에 추가
my_deque.appendleft(0) # 왼쪽에 추가
print(my_deque) # 출력: deque([0, 1, 2, 3, 4, 5])
# deque에서 요소 제거
my_deque.pop() # 오른쪽 요소 제거
my_deque.popleft() # 왼쪽 요소 제거
print(my_deque) # 출력: deque([1, 2, 3, 4])
Counter: 컨테이너에서 요소의 개수를 세는 데 사용하는 딕셔너리 서브 클래스입니다.
예시 코드 3 - Counter:
from collections import Counter
# 문자열에서 문자 개수 세기
char_count = Counter("hello world")
print(char_count) # 출력: Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
# 리스트에서 요소 개수 세기
elem_count = Counter([1, 2, 3, 2, 1, 3, 1, 1, 3, 3, 3])
print(elem_count) # 출력: Counter({3: 5, 1: 4, 2: 2})
OrderedDict: 삽입 순서를 기억하는 딕셔너리 서브 클래스입니다. 파이썬 3.7 이후로 일반 딕셔너리도 삽입 순서를 기억하기 때문에, 이제는 거의 사용되지 않습니다. 그러나, 명시적으로 삽입 순서를 보장하려는 경우 사용할 수 있습니다.
예시 코드 4 - OrderedDict:
from collections import OrderedDict
# OrderedDict 생성
ordered_dict = OrderedDict()
ordered_dict["first"] = 1
ordered_dict["second"] = 2
ordered_dict["third"] = 3
for key, value in ordered_dict.items():
print(key, value)
# 출력:
# first 1
# second 2
# third 3
defaultdict: 딕셔너리 서브 클래스로, 요청한 키를 찾을 수 없는 경우 자동으로 기본값을 할당합니다.
예시 코드 5 - defaultdict:
from collections import defaultdict
# 기본값으로 int (0)를 사용하는 defaultdict 생성
default_dict = defaultdict(int)
# 키 값이 없는 경우 기본값을 할당
default_dict["one"] += 1
default_dict["two"] += 2
print(default_dict) # 출력: defaultdict(<class 'int'>, {'one': 1, 'two': 2})
ChainMap: 여러 개의 딕셔너리를 하나의 매핑으로 그룹화합니다. 이렇게 하면 여러 딕셔너리를 차례대로 검색할 수 있습니다.
예시 코드 6 - ChainMap:
from collections import ChainMap
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
chain_map = ChainMap(dict1, dict2)
print(chain_map) # 출력: ChainMap({'a': 1, 'b': 2}, {'b': 3, 'c': 4})
print(chain_map['a']) # 출력: 1
print(chain_map['b']) # 출력: 2 (첫 번째 딕셔너리의 값이 먼저 반환됩니다)
print(chain_map['c']) # 출력: 4
UserDict, UserList, UserString: 각각 딕셔너리, 리스트, 문자열의 사용자 정의 서브 클래스를 쉽게 만들 수 있게 하는 래퍼 클래스입니다. 이들은 내장 자료형을 상속받는 것보다 사용자 정의 서브 클래스를 작성하는 데 더 적합합니다.
예시 코드 7 - UserDict:
from collections import UserDict
class MyDict(UserDict):
def __missing__(self, key):
return f"{key} not found"
my_dict = MyDict({'a': 1, 'b': 2})
print(my_dict['a']) # 출력: 1
print(my_dict['c']) # 출력: c not found (기본 딕셔너리와 달리 custom 메서드 사용)
컬렉션 모듈은 다양한 고급 컨테이너 유형을 제공하여 프로그래머가 적절한 도구를 선택하여 데이터를 조직하고 작업을 수행할 수 있습니다. 이러한 컨테이너는 일반적인 자료형을 확장하거나 래핑하여 추가적인 기능을 제공합니다. 이를 통해 코드를 더 효율적이고 간결하게 작성할 수 있습니다.
'Python for Beginners' 카테고리의 다른 글
4.2 파일 쓰기(open 함수) (0) | 2023.03.20 |
---|---|
4.1 파일 읽기(open 함수) (0) | 2023.03.20 |
3.4 집합 (0) | 2023.03.17 |
3.3 딕셔너리 (0) | 2023.03.17 |
3.2 튜플 (0) | 2023.03.17 |