파이썬 백엔드 11일차 네임드 튜플

박재정·2025년 1월 17일

학습정보

목록 보기
11/29

1. 네임드 튜플에 대하여 설명하시오.

namedtuple


책의 제목과 가격을 저장하는 Book 클래스와 객체 생성

class Book:
	def __init__(self, title, price):
    	self.title = title
        self. price = price
       
mybook = Book("파이썬을 이용한 비트코인 자동매매", 27000)
print(mybook,title, mybook.price)
#출력 파이썬을 이용한 비트코인 자동매매 27000

같은 정보를 튜플을 활용한 정리

mybook2 = ("파이썬을 이요한 비트코인 자동매매", 27000)
print(mybook2[0], mybook2[1])

튜플은 immutable 타입이기에 변경할 필요가 없는 데이터를 효과적으로 저장
그러나 딕셔너리에 비교하면 값에 대한 label이 없음. 위처럼 class를 사용하면 해결할 수 있으나 번거로움

그럴때 namedtuple을 사용하면 편리하게 튜플을 사용가능
namedtuple은 클래스처럼 객체를 생성할 수 있으며, 튜플처럼 immutable 타입
딕셔너리처럼 label부여도 가능

from collections import namedtuple

Book = naemdtuple('Book','title','price'])
mybook3 = Book("파이썬을 이용한 비트코인 자동매매", 27000)
print(mybook3.title, mybook3.price)

namedtuple을 활용하여 간단히 생성

2.아래가 돌아 가도록 네임드 튜플을 사용하시오.

Tri = 네임드 튜플
t = Tri(3,7) # 네임드 튜플 객체 생성
print(t[0],t[1]) #일반 튜플과 동일한 방법으로 접근 가능하다.

print(t.width , t.height) #일반 튜플과 달리 이름으로도 접근이 가능하다.


from collections import namedtuple
#네임드 튜플 정의
Tri = namedtuple("Tri",["width","height"])
#네임드 튜플 객체 생성
t = Tri(3,7)
#일반 튜플처럼 인덱스로 출력
print(t[0], t[1]) #출력 : 3 7
#namedtuple 이름으로 접근
print(t.width, t.height)

3. 2번과 마찬가지로 아래를 완성하시오.

Cirlce = 네임드 튜플
circle = Cirlce(10)

print(circle[0]) #10
print(circle.radius) #10

def mul(x,y,/): #포지션 인자만 받겠다.
return x * y

mul(x=4,y=5)

from collections import namedtuple

Circle = namedtuple('Circle',['radius']) 
#네임드 튜플 정의

circle = Circle(10)

print(circle[0]) #인덱스로 접근 
print(circle.radius) #필드이름으로 접근 

포지션 인자
print(mul(4,5)) #출력 20 

4. 딕셔너리 만드는 4가지 케이스를 예를 들어 설명하시오.

1. 중괄호 {}를 사용하여 딕셔너리 생성

# 예제
my_champ = {"name": "Pepe", "hp": 25, "mp": 35}
print(my_champ)  # 출력: {'name': 'Pepe', 'hp': 25, 'mp': '35'}

2. dict() 생성자를 사용

my_champ = dict(name="Pepe", hp=25, mp=35)
print(my_champ #출력" {'name': 'Pepe', 'hp': 25, 'mp': '35'}

dict() 함수를 사용해 키-값 쌍을 정의
키를 문자열로 작성할 때 편리하며(키값 ""안해도 됨) Python 내장함수로 지원됨.

3.딕셔너리 내포

조건이나 반복을 통해 딕셔너리를 동적으로 생성

my_champ = {x: x**2 for x in range(1,4)}
print(my_champ) #출력 :{1: 1, 2: 4, 3: 9}

4.zip()함수 사용 다음 5.zip 참고

5. zip 에 대하여 설명하시오.

두개의 리스트 또는 튜플을 zip()으로 묶어서 딕셔너리를 생성한다.

keys = ["name", "kind", "hp"]
values = ["Pepe", "frog", 25]
my_champ = dict(zip(keys, values))
print(my_champ) #출력 : {'name' : 'Pepe', 'kind': 'frog', 'hp':25}

6. 아래를 zip함수를 이용하여 만드시오.

(('a', 1), ('b', 2), ('c', 3))


keys = ["a","b","c"]
valeus = [1,2,3]
my_dic = dict(zip(keys, values))
print(my_dic)
# 출력 {'a': 1, 'b': 2, 'c': 3}

7. 아래를 zip함수를 이용하여 만드시오.

#출력 [('a',1,'one'),('b',2,'two'),('c',3,'three')]

데이터 정의
letters = ['a', 'b', 'c']
numbers = [1, 2, 3]
words = ['one', 'two', 'three']

 zip 함수로 결합
result = list(zip(letters, numbers, words))
print(result)
#출력: [('a', 1, 'one'), ('b', 2, 'two'), ('c', 3, 'three')]

8. *와 ** 사용 규칙 4가지로 요약하여 설명하시오.

1. func(*iterable)

함수 호출시, 이터러블(리스트, 튜플 등)을 언패킹하여 개별 인자로 전달

def my_func(a, b, c):
    print(a, b, c)

values = [1, 2, 3]
my_func(*values)  # 출력: 1 2 3

2.func(**dict)

딕셔너리의 키-값 쌍을 키워드 인자로 언패킹하여 함수에 전달합니다.

#func(**dict)
def my_func(a, b, c):
    print(a, b, c)

values = {'a': 1, 'b': 2, 'c': 3}
my_func(**values)  # 출력: 1 2 3

3.def func(*args)

함수 정의 시, 여러 개의 위치 인자를 하나의 튜플로 처리합니다.

#def func(*args)

def my_func(*args):
    print(args)

my_func(1, 2, 3)  # 출력: (1, 2, 3)

4.def func(**kwargs) 함수 정의 시, 여러 개의 키워드 인자를 하나의 딕셔너리로 처리합니다.

#def func(**args)    
def my_func(**kwargs):
    print(kwargs)

my_func(a=1, b=2, c=3)  # 출력: {'a': 1, 'b': 2, 'c': 3}
  1. 아래의 함수가 있다. 키와 값을 한꺼번에 넘기는 방법을 코딩하시오.

def who(a,b,c):
print(a,b,c ,sep=",")

d = dict(a=1,b=2,c=3)

출력
('a', 1),('b', 2),('c', 3)

10.아래와 같이 변수로 패킹 할때와 , 함수에서 파라미터로 패킹 할때의 차이점은?

a ,*b,c = 1,2,3,4
print(a,b,c)

def func(*args): # 튜플로 묶음
print(args)

  1. 아래의 함수가 있다. 출력값이 아래와 같이 나오도록 함수 호출을 하시오.

def func(arg,**args):
print(arg)
print(args) #def print(
arg,**args):

출력
(1, 2, 3)
{'a': 1, 'b': 2}

  1. 파이썬에서의 버전 확인 방법은?
  2. OrderedDict으로 객체 생성을 한 dictionary 와 dict()함수로 객체를 생성한 딕셔너리의 차이점을 설명해 보시오.
  3. set과 frozenset 의 차이는?

15.아래를 세번째 글자순으로 정렬하시오.

arr = ['abc', 'bac', 'bca']

16.아래를 튜플의 합으로 계산하시오.
nums = [(3, 1),(2, 9),(0, 5)]

17.아래를 글자 갯수 순으로 정렬하시오.
names = ['Julasdfdsaia','Yooadfn','Stevadfen']

  1. 아래가 에러가 나는 이유는?
    frozen_set = frozenset({1,2,3,5,5})
    print(frozen_set)
    frozen_set.add(6)

  2. 아래코드에서 중복을 없애시오.
    t = [3,3,3,7,7,'z','z']

print(t) # 출력
[3,'z',7]

20.아래 코드를 결과값을 예측하고, 분석해 보세요.
b_idx = sorted(range(len(b)), key=lambda k: b[k])
print(b_idx)

세줄요약:
1.네임드 튜플은 클래스를 만드는 과정이다.
2. * 와 ** 쓰는 4가지 케이스를 이해하자.
3. 순서있는 dictionary 는 OrderedDict으로 객체를 생성하자.

profile
파이썬, SQL 개발

0개의 댓글