dev_eun

[Python] 기본 문법 정리 본문

기타

[Python] 기본 문법 정리

_eun 2020. 12. 10. 16:52

동빈나님 영상(이코테 2021 강의 몰아보기) 참고


1. 자료형

정수형

  • 변수에 정수 대입하면 자동으로 정수형

실수형

  • 소수점을 붙인 수를 대입하면 자동으로 실수형 변수

  • 소수부가 0이거나 정수부가 0인 소수는 0 생략 가능

      # 둘다 실수형
      a = .7
      b
  • 나누기 연산(/)을 하였을 경우 실수형으로 반환

  • 지수 표현 방식

    • e, E 다음에 오는 수는 10의 지수부를 의미

        a = 5e10    # 5의 10제곱
        b = 5e0.5    # 5의 제곱근
  • round() 함수 이용하여 반올림

수 자료형의 연산

연산 내용 연산자
곱하기 *
나누기 /
나머지 %
//
거듭 제곱 **

리스트

  • 여러 개의 데이터를 연속적으로 담아 처리

  • C++의 vector와 유사

  • 비어 있는 리스트 초기화는 [], list()

  • 원소를 넣어 초기화는 [1, 5, 6]

  • 인덱스 접근 가능

  • 인덱스에 음수 정수를 넣으면 뒤에서부터 인덱싱 가능

    a = [1, 2, 3, 4, 5]
    
    print(a[-3])    # 뒤에서 3번째 원소 출력
    # 결과 : 3
  • 연속적인 값 가져오기

    • 콜론(:)을 이용

    • list[시작인덱스 : 끝인덱스 + 1]

      a = [1, 2, 3, 4, 5]
      print(a[1:3]
      
      # [2, 3]
  • extended slices

    • arr[A:B:C]
    • index A부터 index B까지 C 간격으로 배열을 만들어라
    • A == None ? 처음부터
    • B == Nond ? 할 수 있는 데까지, C > 0 이면 마지막까지, C < 0 이면 처음까지
    • C == Nond ? 한 칸 간격으로

컴프리헨션

  • 리스트를 초기화하는 방법 중에 하나

  • 대괄호 안에 조건문과 반복문을 적용하여 리스트 초기화 가능

      array = [i for i in range(10) if i % 2 == 1]
      print(array)
    
      # [1, 3, 5, 7, 9]
  • 2차원 리스트 초기화할 때 효과적으로 사용

      array = [[0] * m for _ in range(n)]
    
      # 이렇게 하면 원소가 m개인 리스트 객체가 n개 생기는 거임
      # 의도하지 않은 이상 이렇게 하면 안댐
      array = [[0] * m] * n
  • 언더바(_)는 반복을 수행하되 반복을 위한 변수가 필요 없을 때 사용

리스트 관련 기타 메소드

함수명 사용법 설명 시간 복잡도
append() 리스트.append() 리스트에 뒤에 원소 삽입 O(1)
sort() 리스트.sort() 오름차순 정렬하고 저장, reverse = True 내림차순 정렬 O(NlogN)
reverse() 리스트.rever() 리스트 원소 뒤집음 O(N)
insert() 리스트.insert(삽입할 위치 인덱스, 삽입할 값) 특정 위치에 원소 삽입 O(N)
count() 리스트.count(특정값) 특정값을 가지는 데이터 개수 반환 O(N)
remove() 리스트.remove(특정값) 제일 앞쪽에 있는 특정값 하나만 제거 O(N)
  • 특정한 값을 가진 원소 모두 제거하기

      a = [1, 2, 3, 4, 5]
      remove_set = {3, 5}
    
      result = [i for i in a if i not in remove_set]
      print(result)
    
      # [1, 2, 4]

문자열

  • 큰 따옴표(")나 작은 따옴표(')을 이용하여 문자열 초기화

  • 큰 따옴표 안에 작음 따옴표 포함 가능, vice versa

  • 백슬래시()로도 포함 가능

  • 문자열 끼리 덧셈(+) 연산 가능

  • 문자열과 수 자료형은 덧셈 불가능

    • f 사용

        answer = 7
        print(f"정답은 {answer}입니다.")
      
        # 정답은 7입니다.
  • 문자열을 양의 정수와 곱하는 경우, 문자열이 그만큼 더해짐

  • 인덱싱, 슬라이싱 가능

  • 값은 변경 불가능!!

튜플

  • 한 번 선언된 값 변경할 수 없음
  • 소괄호(())을 이용하여 선언
  • 인덱싱과 슬라이싱 가능(순차적 저장)
  • 서로 다른 성질 데이터를 묶어서 관리할 때 유용
  • 해싱의 키값으로 사용 가능
  • 리스트보다 메모리 효율 좋음

사전

  • key와 value를 쌍으로 같은 데이터 자료형

  • 순서가 없음

  • immutable한 자료형을 key로 사용 가능

  • 해시 테이블을 이용하여 데이터 조회 및 수정이 O(1)임

  • dict() 을 이용하여 초기화 가능, 혹은 대괄호 안에 콤마로 구분해서도 가능

      data = dict()
      data['사과'] = 'apple'
      data['바나나'] = 'banana'
    
      data2 = {
          '사과' : 'apple',
          '바나나' : 'banana'
      }
    
      print(data)
      print(data2)
    
      # data와 data2 같은 결과
      # {'사과': 'apple', '바나나': 'banana'}
  • keys() : 키 데이터만 뽑아서 dict_keys 형태로 반환, list()로 묶어 리스트로 활용

  • values() : 값 데이터만 뽑아서 dict_values 형태로 반환, list()로 묶어 리스트로 활용

집합

  • 중복을 허용하지 않음

  • 순서가 없음

  • set()을 이용하여 초기화, 혹은 대괄호 안에 각 원소를 콤마로 구분하여 초기화

      # 같은 코드
      data = set([1, 2, 3, 4, 5, 5, 5, 5])
      data = {1, 2, 3, 4, 5, 5, 5, 5}
    
      print(data)
    
      # {1, 2, 3, 4, 5}
  • 데이터 조회 및 수정에 있어서 O(1)

집합 자료형 관련 함수

함수명 사용법 설명
add() 집합.add(값) 값을 추가
update() 집합.update(리스트) 원소 여러 개 추가
remove() 집합.remove(값) 특정 값 제거

집합 자료형 연산

형태 연산자
합집합 A U B
교집합 A ∩ B
차집합 A - B

2. 기본 입출력

input()

  • 한 줄의 문자열 입력

빠르게 입력 받기

import sys

# 문자열 입력 받기
data = sys.stdin.readline().rstrip()
print(data)

print()

  • 콤마를 이용하여 띄어 쓰기로 구분하여 출력 가능
  • 출력 이후 디폴트 문자는 줄바꿈
  • end 속성으로 변경 가능

map()

  • 리스트의 모든 원소에 각각 특정 함수를 적용

  • 예시

    • 공백을 기준으로 구분되는 되는 데이터 입력

        data = list(map(int, input().split()))
      
        # 입력 몇 개 없으면
        a, b, c = map(int, input().split())

3. 조건문

x = 15

if x >= 10:
    # code
elif x >= 20:
    # code
else 
    # code

비교연산자

비교연산자
==
!=
>
<
>=
<=

논리연산자

논리연산자
and
or
not

기타 연산자

  • 리스트, 튜플, 문자열, 딕셔너리 모두 사용 가능
연산자
in
not in

pass 키워드

  • 아무 것도 하고 싶지 않을 때 사용
  • if문 안에 비워 놓으면 에러가 발생하기 때문에 사용하면 유용

간소화

  • 실행 코드가 한 줄일 경우

      score = 85
    
      if score >= 80: result = "Success"
      else: result = "Failed"
  • 조건부 표현식

      score = 85
    
      result = "Success" if score >= 80 else "Failed"

4. 반복문

  • continue 키워드 사용 가능

  • break 키워드 사용 가능

  • while

      i = 1
      result = 0
    
      while i>=9:
          result += i
          i += 1
  • for

      array = [1, 2, 3, 4, 5]
    
      for i in array:
          print(i)

range

  • range(시작 값, 끝 값 + 1)
  • range(값 + 1), 0부터 값까지

5. 함수

  • 정의

      def 함수명(매개변수):
          실행 코드
          return 반환 값
  • 반환 값이 여러 개일 경우 콤마로 구분해서 반환 가능

global 키워드

  • 함수안에서 키워드를 사용하지 않으면 참조만 가능, 직접적인 값 변경 불가능
  • 하지만 직접적이지 않고 내부 함수를 이용하는 경우 이건 또 가능
a = 0

# 불가능
# def func():
#     a = 6   

# 가능
def func():
    global a
    a = 6

print(a)    # 6
array = [1, 2, 4]

def func2():
    array.append(6)

func2()
print(array)    # [1, 2, 4, 6]

람다 함수

  • 형식

      lambda 매개변수: 리턴값
array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]

print(sorted(array, key=lambda x: x[1]))
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]

result = map(lambda a, b: a + b, list1, list2)

6. 자주 사용되는 라이브러리

내장 함수

함수명 설명
sum() 합을 반환
min() 최소값 반환
max() 최대값 반환
eval() 문자열로 이루어진 수 연산을 실행
sorted() 오름차순으로 반환, reverse=True 로 내림차순 정렬, key 값으로 정렬 가능

순열과 조합: itertools

  1. 순열

     from itertools import permutations
    
     permutations(n, r)
  2. 조합

     from itertools import combinations
    
     combinations(n, r)
  1. 중복 순열

     from itertools import product
    
     product(n, r)
  2. 중복 조합

     from itertools import combinations_with_replacement
    
     combinations_with_replacement(n, r)

collections

  1. Counter

     from collections import Counter
     cnt = Counter([1, 1, 2, 2, 3, 3, 3])
    
     print(dict(cnt))
     # {1: 2, 2: 2, 3: 3}

math

  1. 최대 공약수

     import math
    
     print(math.gcd(21, 14))
     # 7
    • 번외 : 최소 공배수

        import math
      
        def ldm(a, b):
            return a * b // math.gcd(a, b)
      
        a = 21
        b = 14
      
        print(lcm(a, b))
        # 42
728x90

'기타' 카테고리의 다른 글

[Kafka] max.request.size configuration 오류  (2) 2021.02.02
[Python] 그리디 알고리즘  (0) 2020.12.10
[Linux | Ubuntu] 서버 웹 포트 열기(Apache2)  (0) 2019.12.09