ABOUT ME

다음 섬으로 향하고자, 이번 섬을 기록하는 어느 개발자의 나침반

Today
Yesterday
Total
  • 파이썬 문법(함수&람다, 표준 라이브러리)
    카테고리 없음 2023. 2. 2. 14:41

    ▶ 파이썬에서의 논리 연산자

    다른 언어 파이썬
    X && Y X and Y
    X || Y X or Y
    !X not X

     

    ▶ 리스트, 튜플 문자열, 딕셔너리에 사용 가능한 연산

    in / not in

    x in 리스트 리스트에 x가 있으면 True
    x not in 문자열 문자열에 x가 없으면 True

     

    ▶ pass 키워드

    디버깅에서 일단 조건문 틀만 만들어놓고, 처리부분을 나중에 작성하고 싶을때

    score = 85
    
    if score >= 80:
        pass # 나중에 소스코드를 작성하면 됨
    else:
        print('성적이 80점 미만입니다.')
        
    print('프로그램 종료')

     

     조건부 표현식

    if~else문을 한 줄에 작성 가능

    score = 85
    result = "Success" if score >= 80 else "fail"
    
    print(result)
    =>Success

     

     함수 정의

    def 함수명(매개변수):
        실행할 소스코드
        return 반환 값
    def add(a, b)
        return a+b
        
    print(add(3,7))
    =>10

     

     global 키워드

    함수 바깥에 선언된 변수를 참조할 때

    a = 0
    
    def func():
        global a
        a+=1
        
    for i in range(10):
        func()
        
    print(a)
    =>10

    값을 출력 하는 것은 global 없이도 가능

    a = 10
    
    def func():
        print(a+20)
        
    func()
    =>30

    전역변수인 리스트의 함수를 이용해 호출하는 것도 global 없이 가능

    arr = [1,2,3,4,5]
    
    def func():
        arr.append(6)
        print(arr)
        
    func()
    =>[1,2,3,4,5,6]

    반환 값을 여러개 가질 수도 있다.

    def operator(a,b):
    	add_var = a+b
        sub_var = a-b
        mul_var = a*b
        div_var = a/b
        return add_var, sub_var, mul_var, div_var
        
    a, b, c, d = operator(7,3)
    print(a,b,c,d)

     

    ▶ 람다 표현식

    함수 자체를 입력으로 받는 또 다른 함수가 존재할 때 유용.(함수를 한 줄에 간단히 작성할 수 있으니)

    간단한 함수 or 함수를 한번 사용하고 버릴 경우 유용

    arr = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]
    
    #arr 의 두번째 원소 return(즉, 나이)
    def my_key(x):
    	return x[1]
        
    print(sorted(arr, key = my_key)) #일반적인 함수를 이용한 나이순 정렬.
    print(sorted(arr, key = lambda x: x[1]) #람다 활용. 어떤 원소x가 있을 때 그것의 index 1번째 원소를 이용

    예) 람다 표현식으로 구현한 add() 메서드

    print((lambda a, b: a+b)(3,7))
    =>10

    여러 개의 리스트에 적용할 때 유용(동일한 규칙을 가지는 함수를 모두 적용할 때)

    # list1, list2 각 순서의 원소끼리 더한 리스트를 만드는 코드
    list1 = [1,2,3,4,5]
    list2 = [6,7,8,9,10]
    
    result = map(lambda a, b: a + b, list1, list2) # lambda로 작성한 함수를 list2과 list2에 적용하는 것.
    
    print(list(result))
    =>[7, 9, 11, 13, 15]

     

    ▶ 코딩테스트에서 유용한 표준 라이브러리

    내장 함수 기본 입출력, 정렬함수 등 프로그램 작성 필수 기능들
    itertools 반복되는 형태의 데이터 처리에 유용(순열, 조합 등)
    heapq 힙 라이브러리 제공(우선순위 큐 - 다익스트라 등)
    bisect 이진 탐색 제공
    collections 덱, 카운터 등 제공
    math 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 pi 등

     

    - 내장 함수

    1. sum()

    result = sum([1,2,3,4,5])
    print(result)
    =>15

    2. min(), max()

    min_result = min(7,3,5,2)
    max_result = max(7,3,5,2)
    print(min_result, max_result)
    ==>2 7

    3. eval() 수식 계산

    result = eval("(3+5)*7")
    print(result)
    =>56

    4. sorted()

    result = sorted([9,1,8,5,4])
    reverse_result = sorted([9,1,8,5,4], reverse=True)
    print(result)
    print(reverse_result)
    =>
    [1, 4, 5, 8, 9]
    [9, 8, 5, 4, 1]

    5. sorted() - 키 속성으로 정렬

    arr = [('홍길동', 35), ('이순신', 75), ('아무개', 50)]
    result = sorted(arr, key=lambda x: x[1])
    print(result)
    =>[('홍길동', 35), ('아무개', 50), ('이순신', 75)]

     

    - Itertools

    모든 경우의 수를 고려해야 할 때 itertools 라이브러리를 사용하면 효과적.

    순열(nPr) 서로 다른 n개에서 서로 다른 r 개 선택해 나열 {'A', 'B', 'C'}에서 3개를 선택해 나열한다
    => ABC, ACB, BAC, BCA, CAB, CBA
    조합(nCr) 서로 다른 n개에서 순서 상관X 서로 다른 r개 선택 {'A', 'B', 'C'}에서 순서 상관없이 두 개 선택
    => AB, AB, BC

    1. permutations() 순열 구하기

    from itertools import permutations
    
    data = ['A', 'B', 'C']
    
    result = list(permutations(data, 3))
    print(result)
    =>[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

    2. combinations() 조합 구하기

    from itertools import combinations
    
    data = ['A','B','C']
    
    result = list(combinations(data, 2))
    print(result)
    =>[('A', 'B'), ('A', 'C'), ('B', 'C')]

    - Collections

    counter() 각 원소의 등장 횟수 세는 기능

    from collections import Counter
    
    counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
    
    print(counter['blue']) # blue 등장 횟수
    print(counter['green']) # green 등장 횟수
    print(dict(counter)) # 사전 자료형으로 반환
    
    =>
    3
    1
    {'red': 2, 'blue': 3, 'green': 1}

    - Math

    gcd()  최대공약수 구하기

    # 최대 공약수(GCD)와 최소 공배수(LCM)을 구하는 소스코드
    import math
    
    # 최소 공배수(LCM)구하는 함수
    def lcm(a, b):
    	return a*b // math.gcd(a,b)      # //은 몫 연산자
        
    a = 21
    b = 14
    
    print(math.gcd(21, 14)) # 최대 공약수
    print(lcm(21,14)) # 최소 공배수
    =>
    7
    42

     

Designed by Tistory.