일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 정수인코딩
- 노마쌤과 즐거운 영어 습관
- 파이썬
- 노마쌤
- HTML
- 신뢰구간
- DOM
- Ajax프레임워크
- 웹폰트
- CSS
- NLP
- 인덱스
- 클러스터링기법
- 노트list
- 자기지도학습
- 명령어
- EC2
- 유의수준
- JS
- 매일영어습관
- Mac konlpy
- DOMAPI
- 질의확장
- Filter
- 프로토콜
- R
- 벡터
- 함수
- Ajax
- 행렬
- Today
- Total
채니의 개발일기
클래스 - collection라이브러리 본문
colletions
- 파이썬의 표준 라이브러리 중 하나로 다양한 컨테이너 데이터 타입을 제공한다.
1) nametuple(): 튜플의 서브 클래스를 생성하는 팩토리 함수 .필드에 이름을 부여하여 튜플을 더 읽기 쉽게 만든다
* 필드란?
: 객체 지향 프로그래밍에서 사용 되는 용어로, 클래스나 객체 내부에서 데이터를 저장하는 변수를 의미 한다.
: 필드는 객체의 상태나 속성을 나타내며, 다른용어로는 "속성" "멤버변수", "인스턴스 변수"등으로 불린다
예를들어 person 클래스가 있다고 가정할때
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
-> 'name'과 'age'는 'Person'의 클래스 필드이다. 이 필드들은 'Person' 객체의 상태나 속성들을 나타낸다. 즉 각, 'Person'객체는 고유의 'name'과 'age'값을 가질 수 있다.
객체를 생성 할 때:
person1 = Person('Alice',30)
-> 'person1'객체는 'name'필드에 'Alice'라는 값을, 'age'필드에 30이라는 값을 가지게 된다
2) deque: 양쪽 끝에서 빠르게 추가 및 제거가 가능한 리스트와 유사한 데이터 타입 -> 스택과 큐를 모두 구현 할 수 있다.
3) Counter: 요소의 개수를 세는 데 유용한 딕셔너리 서브클래스 -> 빈도를 쉽게 계산가능하다
4) OrderdDict: 키의 삽입 순서를 기억하는 딕셔너리 서브 클래스이다.
5) defaauldict: 호출 가능한 함수를 제공하여 존재하지 않는 키에 대한 기본값을 반환하는 딕셔너리 서브클래스이다
6) ChainMap: 여러 딕셔너리를 하나의 매핑으로 그룹화하는 클래스이다.
7) UserDict,UserList,UserString: 딕셔너리, 리스트, 문자열의 래퍼 및 서브 클래스를 쉽게 만들 수 있도록 도와주는 클래스이다.
import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
class FrenchDeck:
ranks = [str(n) for n in range(2, 11)] + ['J', 'Q', 'K', 'A']
suits = 'spades diamonds clubs hearts'.split()
def __init__(self):
self._cards = [Card(rank, suit) for suit in self.suits
for rank in self.ranks]
def __len__(self):
return len(self._cards)
def __getitem__(self, position):
return self._cards[position]
1. namedtuple 사용:
Card = collections.namedtuple('Card', ['rank', 'suit'])
'namedtuple'을 사용하여 'Card' 라는 이름의 튜플의 서브클래스를 생성한다. 이 튜플 'rank'와 'suit' 두개의 필드를 가진다. 'rank'는 카드의 숫자나 문자를 나타내고, 'suit'는 카드의 무늬를 나타낸다.
- 'nametuple' = 파이썬 'collections' 모듈에 포함된 팩토리 함수로, 이름이 지정된 필드를 가진 튜플의 서브클래스를 생성한다.
1. 데이터베이스 레코드와 유사: 'namedtuple'을 사용하면 데이터베이스 레코드와 유사한 형태의 객체를 생성할 수 있다. 각 필드에는 이름이 지정되어 있으므로, 인덱스 대신 이름으로 값을 가져올 수 있다.
2. 불변성: 'namedtuple'로 생성된 객체는 불편(immutable)이다. 따라서 한번 생성된 객체의 필드 값을 변경할 수 없다.
3. 사용자 정의 메서드가 없음: 'namedtuple'로 생성된 객체는 사용자 정의 메서드를 포함하지 않는다. 이는 간단한 데이터 구조를 표현하는데 사용한다.
예제)
from collections import namedtuple
#namedtuple을 사용하여 'Person'이라는 이름의 튜플을 정의한다
Pesron = namedtuple('Person',['name','age',gender'])
#Person 객체 생성
alice = Person(name='Alice', age=30, gender='Female')
#필드에 접근
print(alice.name)#출력: Alice
print(alice. age) #출력:30
-> 위 예제에서 'Person'은 'nametuple'을 사용하여 정의된 튜플의 서브클래스이다.
'alice'의 객체는 'Person'의 인스턴스로, 각 필드에 이름을 사용하여 접근할 수 이싿.
2. FrenchDeck 클래스 정의:
class FrenchDeck:
3. ranks와 suits:
ranks = [str(n) for n in range(2, 11)] + ['J', 'Q', 'K', 'A']
suits = 'spades diamonds clubs hearts'.split()
'ranks'는 카드의 숫자와 문자를 나타내는 리스트이다. 2부터 10까지의 숫자와, J,Q,K,A를 포함한다
'suits'는 카드의 무늬를 나타내는 리스트이다. 스페이드, 다이아몬드, 클럽, 하트를 포함한다.
4. 생성자(init):
def __init__(self):
self._cards = [Card(rank, suit) for suit in self.suits
for rank in self.ranks]
FrenchDeck 객체가 생성될때 실행되는 생성자로, _cards라는 내부 리스트에 52장의 카드를 생성하여 저장한다. 이때 각 카드는 'Card' namedtuple을 사용하여 생성된다
5. len메서드:
def __len__(self):
return len(self._cards)
FrenchDeck 객체의 길이를 반환하는 메서드이다. '_card' 리스트의 길이, 즉 52를 반환한다.
6. getitem 메서드:
def __getitem__(self, position):
return self._cards[position]
FrenchDeck 객체에 대한 인덱싱을 지원하는 메서드 이다. 예를들어, deck[0]과 같이 객체에 인덱스를 사용하면 첫번째 카드를 반환한다.
'프로그래밍언어 > 파이썬' 카테고리의 다른 글
파이썬 - 파이썬 데이터 모델란? (1) | 2023.10.13 |
---|---|
파이썬- 시퀀스란? (0) | 2023.10.13 |
객체지향프로그램밍과 파이썬의 클래스와 인스턴스 (0) | 2023.10.12 |
키워드 포함 데이터프레임 검색 (0) | 2023.10.03 |
For문 제너레이터식 형식 (0) | 2023.09.17 |