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을 활용하여 간단히 생성
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)
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

# 예제
my_champ = {"name": "Pepe", "hp": 25, "mp": 35}
print(my_champ) # 출력: {'name': 'Pepe', 'hp': 25, 'mp': '35'}
my_champ = dict(name="Pepe", hp=25, mp=35)
print(my_champ #출력" {'name': 'Pepe', 'hp': 25, 'mp': '35'}
dict() 함수를 사용해 키-값 쌍을 정의
키를 문자열로 작성할 때 편리하며(키값 ""안해도 됨) Python 내장함수로 지원됨.
조건이나 반복을 통해 딕셔너리를 동적으로 생성
my_champ = {x: x**2 for x in range(1,4)}
print(my_champ) #출력 :{1: 1, 2: 4, 3: 9}
두개의 리스트 또는 튜플을 zip()으로 묶어서 딕셔너리를 생성한다.
keys = ["name", "kind", "hp"]
values = ["Pepe", "frog", 25]
my_champ = dict(zip(keys, values))
print(my_champ) #출력 : {'name' : 'Pepe', 'kind': 'frog', 'hp':25}
(('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}
#출력 [('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')]
함수 호출시, 이터러블(리스트, 튜플 등)을 언패킹하여 개별 인자로 전달
def my_func(a, b, c):
print(a, b, c)
values = [1, 2, 3]
my_func(*values) # 출력: 1 2 3
딕셔너리의 키-값 쌍을 키워드 인자로 언패킹하여 함수에 전달합니다.
#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
함수 정의 시, 여러 개의 위치 인자를 하나의 튜플로 처리합니다.
#def func(*args)
def my_func(*args):
print(args)
my_func(1, 2, 3) # 출력: (1, 2, 3)
#def func(**args)
def my_func(**kwargs):
print(kwargs)
my_func(a=1, b=2, c=3) # 출력: {'a': 1, 'b': 2, 'c': 3}
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)
def func(arg,**args):
print(arg)
print(args) #def print(arg,**args):
출력
(1, 2, 3)
{'a': 1, 'b': 2}
15.아래를 세번째 글자순으로 정렬하시오.
arr = ['abc', 'bac', 'bca']
16.아래를 튜플의 합으로 계산하시오.
nums = [(3, 1),(2, 9),(0, 5)]
17.아래를 글자 갯수 순으로 정렬하시오.
names = ['Julasdfdsaia','Yooadfn','Stevadfen']
아래가 에러가 나는 이유는?
frozen_set = frozenset({1,2,3,5,5})
print(frozen_set)
frozen_set.add(6)
아래코드에서 중복을 없애시오.
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으로 객체를 생성하자.