Python 기초 정리

so2·2021년 8월 5일
0
post-custom-banner

기타

  • 나누기 연산 결과 실수형
  • // : 몫 연산자
    ** : 거듭제곱 연산자
  • 리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱을 이용 → 끝 인덱스는 실제 인덱스보다 1 더 크게 설정한다
  • 리스트 컴프리헨션 : 대괄호 안에 조건문과 반복문을 적용하여 리스트를 초기화 할 수 있다
    a = [for i in range(10)]
    a = [i for i in range(20) if i%2==1]
    a = [i*i for i in range(1,10)]
   
    n = 4
    m = 3
    array = [[0] * m for _ in range(n)] // 3x4 리스트

    a = [1, 2, 3, 4, 5, 5]
    remove_set = {3, 5}
    result = [i for i in a if i not in remove_set]
  • 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 언더바(_)를 자주 사용
    for _ in range(5)
    	print("hello world")
  • 리스트 관련 기타 메서드

  • 문자열을 초기화할 때는 큰따옴표나 작은 따옴표 이용

  • x in 리스트 : 리스트 안에 x가 들어가 있을 때 true

    x not in 문자열 : 문자열 안에 x가 들어가 있지 않을 때 true

  • pass 키워드

    • 아무것도 처리하고 싶지 않을 때
      ex) 디버깅 과정에서 일단 조건문의 형태만 만들어 놓고
      조건문을 처리하는 부분은 비워놓고 싶은 경우
      a = 50 

      if a>=30:
          pass
      else:
          print("a<30")
  • 조건부 표현식
    score = 85
    result = "Success" if score>=80 else "FAIL"

    print(result)
  • 수학의 부등식 표현을 그대로 사용할 수 있다

    ex) 0<x<20

  • 반복문 for문

    array = [1, 2, 3, 4, 5]

    # 데이터(리스트, 튜플 등)에 포함되어 있는 원소를 첫 번째 인덱스부터 차례대로 하나씩 방분 
    for x in array: 
    	   print(x) 

    result = 0

    # i는 1부터 9까지의 모든 값을 순회
    # 인자를 하나만 넣으면 자동으로 시작 값은 0이 된다 
    for i in range(1, 10):
    	result += i
  • 함수
    • 특정한 작업을 하나의 단위로 묶어 놓은 것
    • 종류
      • 내장함수
      • 사용자 정의 함수
  • global 키워드
    • 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조
    a = 0

    def func():
    	global a
    	a += 1

    print(a)

튜플

  • 한 번 선언된 값을 변경할 수 없다
  • 소괄호()를 이용
  • 리스트에 비해 공간 효율적
  • 사용하면 좋은 경우
    • 서로 다른 성질의 데이터를 묶어서 관리해야할 때
      최단 경로 알고리즘에서는 (비용, 노드번호)의 형태로 튜플 자료형을 자주 사용
    • 데이터의 나열을 해싱의 키 값으로 사용해야 할 때
      튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용될 수 있음
    • 리스트보다 메모리를 효율적으로 사용해야 할 때

사전 자료형

  • 키와 값의 쌍을 데이터로 가지는 자료형
  • 변경 불가능한(Immutable)자료형을 키로 사용할 수 있다
  • 파이썬의 사전 자료형은 해시 테이블을 이용하므로 데이터 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다
  • keys() : 키 데이터만 뽑아서 리스트
    values() : 값 데이터만 뽑아서 리스트
  data = dict()
  data['사과'] = 'Apple'
  data['바나나'] = 'Banana'

  data.keys() 

집합 자료형

  • 중복을 허용하지 않고 순서가 없다
  • 리스트나 문자열을 이용해서 초기화할 수 있다 → set() 함수를 이용
  # 집합 초기화
   data = set([1, 1, 2, 3, 4, 4, 5])
   data1 = {1, 1, 2, 2, 3, 4, 5, 5}

   print(data)
   print(data1)

   // 결과 
   {1, 2, 3, 4, 5}
   {1, 2, 3, 4, 5}
  • 중괄호안에 각 원소를 콤마를 기준으로 구분하여 삽입함으로써 초기화 할 수 있다
  • 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다
  • 합집합(|), 교집합(&), 차집합(-) 연산이 있다
  • add : 새로운 원소 추가
    update : 새로운 원소 여러 개 추가
    remove : 특정한 값을 갖는 원소 삭제

사전자료형과 집합 자료형 특징

  • 리스트, 튜플은 인덱싱을 통해 값 얻을 수 있다
  • 사전자료형, 집합자료형 순서가 없어서 인덱싱을 통해 값을 얻을 수 없다
    사전의 key 혹은 집합의 원소를 이용해 O(1)의 시간 복잡도로 조회한다

표준 입력 방법

  • input() : 한 줄의 문자열을 입력 받는 함수
  • map() : 리스트의 모든 각각의 원소에 특정한 함수를 적용할 때 사용
    n = int(input())
    data = list(map(int, input().split()))

    print(n)
    print(data)

    a, b, c = map(int, input().split())
    print(a, b, c)
  • sys.stdin.readline() 메서드
    • 사용자로부터 최대한 빠르게 입력받아야 하는 경우 사용
    • 입력 후 엔터가 줄 바꿈 기호로 입력되므로 rstrip() 메서드를 함께 사용한다
    • 이진탐색, 정렬, 그래프 관련 문제에서 자주 사용
    import sys

    data = sys.stdin.readline().rstrip()
    print(data)

표준 출력 방법

  • print()
    • 기본 출력 함수
    • 각 변수를 콤마를 이용하여 띄어쓰기로 구분해 출력할 수 있다
    • 기본적으로 출력 이후에 줄 바꿈을 수행
      줄 바꿈을 원치 않는 경우 'end' 속성을 이용
  • f-string
    • 파이썬 3.6부터 사용 가능하며, 문자열 앞에 접두사 'f'를 붙여 사용
    answer = 8 

    print(answer, end=" ")
    print(f"정답은 {answer}입니다.")

람다 표현식

    # Q.1
    # lambda 매개변수:반환값
    print((lambda a, b: a+b)(3, 7))

    # Q.2
    array = [('홍길동',50), ('이순신',32), ('아무개', 74)]

    # 방법 1
    def my_key(x): 
    	return x[1]
    print(sorted(array, key=my_key))

    # 방법 2
    print(sorted(array, key=lambda x: x[1]))

    # Q.3
    list1 = [1,2,3,4,5]
    list2 = [6,7,8,9,10]
    result = map(lambda a, b: a+b, list1, list2)
    print(list(result))

유용한 표준 라이브러리

  • 내장함수
    • 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들 제공
  • itertools
    • 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공
  • heapq
    • 힙(Heap) 자료구조를 제공
  • bisect
    • 이진 탐색 기능 제공
  • collections
    • 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함
  • math
    • 필수적인 수학적 기능 제공

순열과 조합

  • 모든 경우의 수를 고려해야 할 때 어떤 라이브러리를 효과적으로 사용할 수 있을까 ?

    • 순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것
      • {'A','B','C'}에서 세 개를 선택하여 나열하는 경우
        ☞ 'ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'
    • 조합 : 서로 다른 n개에서 순서에 상관 없이 서로 다른 r개를 선택하는 것
      • {'A', 'B', 'C'}에서 순서를 고려하지 않고 두 개를 뽑는 경우
        ☞ 'AB', 'AC', 'BC'

    ################  순열 
    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')]

    ################ 중복 순열
    from itertools import product
    data = ['A', 'B', 'C']
    result = list(product(data, repeat=2)) # 2개를 뽑는 모든 순열 구하기 (중복 허용)
    ############### 조합
    from itertools import combinations

    data = ['A', 'B', 'C']

    result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기
    print(result)

    #실행 결과 
    [('A','B'),('A','C'),('B','C')]

    ################ 중복 조합 
    import itertools import combinations_with_replacement
    data = ['A', 'B', 'C']
    result = list(combinations_with_replacement(data,2))
    print(result)

Counter

  • collections 라이브러리의 Counter는 등장 횟수를 세는 기능을 제공
  • iterable객체가 주어졌을 때 내부의 원소가 몇 번씩 등장했는지를 알려준다
    from collections import Counter

    counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
    print(counter['blue'])
    print(counter['green'])
    print(dict(counter))

    #실행 결과 
    3
    1
    {'red':2, 'blue':3, 'green':1}

최대 공약수와 최소 공배수

    import math 

    # 최소 공배수(LCM)를 구하는 함수 
    def lcm(a,b):
    	return a*b // math.gcd(a,b)

    a=21
    b=14

    print(math.gcd(a,b))
    print(lcm(a,b))

"이것이 코딩 테스트다 with python" 을 참고해 작성되었습니다.

post-custom-banner

0개의 댓글