«   2024/07   »
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
Recent Posts
Today
Total
관리 메뉴

짜리몽땅 매거진

[Python] 딕셔너리 set/def/lambda 본문

Data/Python

[Python] 딕셔너리 set/def/lambda

쿡국 2023. 7. 24. 16:01

set, def, lambda 를 활용한 딕셔너리 표현

set 함수 : 중복값을 제거해주는 함수
number=[1,2,3,4,5,5,5]
number
[1, 2, 3, 4, 5, 5, 5]
set(number) #set함수는 딕셔너리로 출력
{1, 2, 3, 4, 5}
합집합, 교집합, 여집합, 차집합 등으로 응용 가능
a={1,2,3,4,5}
b={4,5,6,7,8}
a|b #합집합
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_4032\3331476000.py in <module>
----> 1 a|b #합집합

TypeError: unsupported operand type(s) for |: 'list' and 'list'

a&b #교집합
{4, 5}
함수
반복되는 경우 , 길어지는 경우 계속 동일한 코드를 사용하면 에러 날 확률이 높다.
한 번 만들어 놓으면 계속 불러서 쓸 수 있다.
numpy.mean(1+2) #mean함수(평균을 구하는 함수) 는 numpy를 먼저 호출해야 사용 가능하다. 이외에 분산, 표준편차를 구하는 함수도 마찬가지
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_4032\3518666119.py in <module>
----> 1 numpy.mean(1+2)

NameError: name 'numpy' is not defined

import numpy as np
np.mean(1+2)
3.0
def 함수이름()
코드
def kuk():
    print('안녕하세요')
    print('저는')
    print('국준호입니다')
kuk()  #위에서 def를 통해 함수를 지정했으므로 따로 프린트하지 않고 함수만 호출하면 된다.
안녕하세요
저는
국준호입니다
def jun(a,b,c):
    print(a+b)
    print(b-c)
    print(a*b*c)
jun(10,9,8) 
19
1
720
return을 통해 값 반환하기
def f(x):
    return x+2   
f(2)
4
#print와 return의 차이
​
#print는 단순히 출력값을 보여주는 기능
#return은 함수에 대한 반환값을 지정
def f(x):
    return x+1
print(f(1)) #f(1)을 출력해야하므로 함수 호출-->1 대입-->결과값 2 반환-->최종적으로 f(1) 출력
2
def f(a,b,c):
    return a+b,a+c,a*c,b/c
f(4,5,2)
(9, 6, 8, 2.5)
람다 표현식
람다는 함수를 간편하게 작성할 수 있게 만드는 것
좀 더 간결하게 만드는 것
lambda 매개변수 : 식
x=lambda a:a+200
x(100)
300
(lambda a:a+200)(100) #뒤에(인수)를 표기하면 바로 출력 가능
300
(lambda a:a+200)(100,200) #인수가 1개 일때만 소괄호를 쓴다.애초에 오류임
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_4032\3464615822.py in <module>
----> 1 (lambda a:a+200)(100,200) #인수가 1개 일때만 소괄호를 쓴다.

TypeError: <lambda>() takes 1 positional argument but 2 were given

a=set(map(lambda a:a+200,[100,200])) #set,map, list를 모두 사용할 수도 있다.
a
{300, 400}

* 추가 과제1

저번시간에 배운 리스트 적용되는 것들을 테스트해보자

할당, 복사 반복문, 리스트컴프리헨션 가능

최소 3개 이상씩 딕셔너리로 적용시켜서 코드 만들고 주석처리하기

할당
a=b={'일':1,'이':2,'삼':3,'사':4,'오':5}
a
{'일': 1, '이': 2, '삼': 3, '사': 4, '오': 5}
b
{'일': 1, '이': 2, '삼': 3, '사': 4, '오': 5}
a['삼']=300
a
{'일': 1, '이': 2, '삼': 300, '사': 4, '오': 5}
b   #할당은 a의 값만 바꿔도 b도 똑같이 적용됨.
{'일': 1, '이': 2, '삼': 300, '사': 4, '오': 5}
복사
c=a.copy()
c

a['삼']=400
a
{'일': 1, '이': 2, '삼': 400, '사': 4, '오': 5}
b #이처럼 b는 값이 같이 바뀌지만
{'일': 1, '이': 2, '삼': 400, '사': 4, '오': 5}
c #copy 즉, 복사한 c의 경우 바뀌지 않음.
{'일': 1, '이': 2, '삼': 300, '사': 4, '오': 5}
리스트 컴프리헨션
국준호=['국','준' ,'호']
국준호
['국', '준', '호']
브다=[1,2,3]
브다
[1, 2, 3]
a={i:j for (i,j) in zip(국준호, 브다)} #zip()함수를 사용하는 이유: 여러객체를 조합하여 순서대로 요소를 묶을 때 유용하게 사용 가능
a
{'국': 1, '준': 2, '호': 3}

* 추가 과제2

나머지 합집합 교집합을 제외한 집합들을 코드로 만들어주시고 주석으로 정리해 주세요!!
차집합
a = {1,2,3,4}
b = {4,5,6,7}
a-b
{1, 2, 3}
대칭차
a^b
{1, 2, 3, 5, 6, 7}