본문 바로가기
C++,python (인프런+사이트)/python 파이썬 정리

매직 메소드_네임드튜플

by 알 수 없는 사용자 2022. 4. 1.

https://www.tutorialspoint.com/namedtuple-in-python

 

Namedtuple in Python

Namedtuple in Python The NamedTuple is another class, under the collections module. Like the dictionary type objects, it contains keys and that are mapped to some values. In this case we can access the elements using keys and indexes. To use it at first we

www.tutorialspoint.com

정의 : 네임드Tuple은 Collections 모듈 아래에 있는 다른 클래스입니다. 사전 유형 개체와 마찬가지로 키가 포함되어 있으며 일부 값에 매핑됩니다. 이 경우 키와 인덱스를 사용하여 요소에 액세스할 수 있습니다. 처음에 사용하려면 컬렉션 표준 라이브러리 모듈을 가져와야 합니다.

 

튜플을 딕셔너리처럼 사용가능하고, 요소에 키또는 인덱스로 접근이 가능하다. ( data 사용/접근에 용이함)


코드

더보기
# Chapter03-03
# 파이썬 심화
# 데이터 모델(Data Model)
# 참조 : https://docs.python.org/3/reference/datamodel.html
# Namedtuple 실습
# 파이썬의 중요한 핵심 프레임워크 -> 시퀀스(Sequence), 반복(Iterator), 함수(Functions), 클래스(Class)

# 객체 -> 파이썬의 데이터를 추상화
# 모든 객체 -> id, type -> value

# 일반적인 튜플 사용
pt1 = (1.0, 5.0)
pt2 = (2.5, 1.5)

from math import sqrt
from this import d

l_leng1 = sqrt((pt2[0] - pt1[0]) ** 2 + (pt2[1] - pt1[1]) ** 2)

print(l_leng1)


# 네임드 튜플 사용
from collections import namedtuple

# 네임드 튜플 선언
Point = namedtuple('Point', 'x y')

# 두 점 선언
pt3 = Point(1.0, 5.0)
pt4 = Point(2.5, 1.5)

# 계산
l_leng2 = sqrt((pt4.x - pt3.x) ** 2 + (pt4.y - pt3.y) ** 2)

# 출력
print(l_leng2)
print(l_leng1 == l_leng2)


# 네임드 튜플 선언 방법
Point1 = namedtuple('Point1', ['x', 'y'])
Point2 = namedtuple('Point2', 'x, y')
Point3 = namedtuple('Point3', 'x y')
Point4 = namedtuple('Point4', 'x y x class', rename=True) # Default=False

# 출력
print(Point1, Point2, Point3, Point4)

print()
print()

# Dict to Unpacking
temp_dict = {'x': 75, 'y': 55}

# 객체 생성
p1 = Point1(x=10, y=35)
p2 = Point2(20, 40)
p3 = Point3(45, y=20)
p4 = Point4(10, 20, 30, 40)
p5 = Point3(**temp_dict)

# 출력
print(p1, p2, p3, p4, p5)

print()
print()

# 사용
print(p1[0] + p2[1]) # Index Error 주의
print(p1.x + p2.y) # 클래스 변수 접근 방식

# Unpacking
x, y = p3

print(x+y)

# Rename 테스트
print(p4)

print()
print()


# 네임드 튜플 메소드
temp = [52, 38] 

# _make() : 새로운 객체 생성
p4 = Point1._make(temp)

print(p4)

# _fields : 필드 네임 확인
print(p1._fields, p2._fields, p3._fields)

# _asdict() : OrderedDict 반환
print(p1._asdict(), p4._asdict())


# 실 사용 실습
# 반20명 , 4개의 반-> (A,B,C,D) 번호

# 네임드 튜플 선언
Classes = namedtuple('Classes', ['rank', 'number'])

# 그룹 리스트 선언
numbers = [str(n) for n in range(1, 21)]
# 1~20 순으로 n에 넣으면서 str(n)에 리스트형식으로 append해줌

ranks = 'A B C D'.split()

# List Comprehension 중첩으로 쓴거
students = [Classes(rank, number) 
                for rank in ranks 
                    for number in numbers]

print(len(students))
print(students)

# 추천
students2 = [Classes(rank, number) 
                    for rank in 'A B C D'.split() 
                        for number in [str(n) 
                            for n in range(1,21)]]


print()
print()

print(len(students2))
print(students2)

print()
print()

# 출력
for s in students:
    print(s)

네임드 튜플 사용 하기전에

이 공식을 표현해보자 ( 일반적인 튜플 이용 )

sqrt는 루트, **은 제곱


네임드 튜플을 이용해 공식을 표현해보면

 

네임드 튜플 기본 형식

 

# 네임드 튜플 선언 방법
 (여러개있다 이중에 사용함)

# 객체 생성
 (여러개있다 이중에 사용함 )
 
 
 
# Unpacking
딕셔너리를 튜플로 변환 시켜주는 것도 가능


네임드튜플 + 리스트 컴프리헨션

A 1      B 1      C 1      D 1

A 2      B 2      C 2      D 2

A 3      B 3      ~~~

A ~      B ~

A 20     B 20    C 20    D 20

형식으로 만드는거

 

1.

2.

 

출력은

 

 

댓글