Python 기초 정리 1 (기초~자료형)

23493 단어 pythonpython

맥은 기본적으로 파이썬이 설치되어 있다. 버전이 2점대일 경우 홈페이지가서 수동 설치 필요.

  • python.org

  • Python 3.6.2 Downloads (파이썬2와 3은 호환 안되는 부분 있음. 처음 시작하는 사람은 Python3하기)

  • 내장함수

  1. print() → 출력함수

    print(1, 2, 3) → 1 2 3 (쉼표써서 출력하고자 하면 자동으로 띄어쓰기 상태로 출력됨 → 띄어쓰기는 꼭 넣어주기)

    • print(’’, end=’’) 출력의 끝 지정 가능.
      print('집단지성', end='미운코딩새끼')
      집단지성미운코딩새끼
  2. input() : 사용자 입력 함수 → 안에 문자 넣을 수 있음

    input(’이름을 입력하세요 :)
    age = input(’당신의 나이는? :) → 사용자가 31입력 → 
    age =31
  3. int() → 형 변환 함수 / 변수를 int형으로 변경 가능

  4. str() → 형 변환 함수 / 변수를 str형으로 변경 가능

  5. list() → 형 변환 함수 / 변수를 list형으로 변경 가능

    my_str = 'coding'
    list(my_str)
    ['c', 'o', 'd', 'i', 'n', 'g']
  6. len() → 변수의 길이를 반환

  7. range() → 연속되는 숫자를 값으로 취하고 싶을 때 사용하는 함수

    사용법 : range(시작할 숫자, 마지막 숫자(실제 숫자는 -1))

    for i in range(0, 3) : # 0부터 시작해서  3 직전까지 숫자 출력 -> [0, 1, 2]
    	print(i)
    
    0
    1
    2
  8. bool()

    bool( ) 을 이용하면 입력된 식이나 값을 평가해 불 형의 값(True 또는 False)을 출력해준다.

    식이나 값을 계산해서 결과값이 만들어지는 것을 평가(evaluate)라고 한다.

    python 언어에서 정수값 0은 False(거짓)로 평가되고, 그 외의 값들은 모두 True(참)로 평가된다.

    • 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다.
  • Variable
    값 저장할 수 있음. 이 값은 바뀔 수 있음.

변수명 = 할당할 값 → 여기서 =은 대입연산자

  • Naming 규칙 : 글자 가능, _, 대소문자 구분 가능. 한글도 됨, *도 됨. → 파이썬에는 유니코드를 쓰기때문에 유니코드 안에 들어 있는 문자는 다 됨.

    ❗❗❗

    1. 숫자로 시작할 수 없음.
    2. 공백 안됨 (언더바 쓰셈)
  • 자료형

  • Numeric

    • 정수형 : 정수형(Integer)는 정수를 다루는 자료형
      • 양의 정수, 음의 정수, 0 포함
      • 코테에서 출제되는 많은 문제들은 주로 정수형 다룸.
    • 실수형 : 실수형(Real Number)는 소수점 아래의 데이터를 포함하는 수 자료형
      • 파이썬에서는 변수에 소수점을 붙인 수를 대입하면 실수형 변수로 처리됨.
      • 소수부가 0이거나, 정수부가 0인 소수는 0을 생략하고 작성 가능 ex) 5. -7. ⇒ 실수
    • 복소수형
      • 지수 표현 방식
        - 파이썬에서는 e나 E를 이용한 지수 표현 방식을 이용
        - e나 E다음에 오는 수는 10의 지수부를 의미

            ex) 1e9 ⇒ 10의 9제곱을 의미
            
            유효숫자e지수 = 유효숫자 * 10지수
            

        수 자료형의 연산

      • 사칙연산 많이 사용

      • 나누기 연산자 (/) 사용시 주의 ⇒ 파이썬에서 나누기 연산자(/)는 나눠진 결과를 실수형으로 반환

      • 나머지 연산자 (%)

      • 몫을 얻기 위한 연산자 (//)

      • 거듭 제곱 연산자 (**)

      • 개발과정에서 실수 값을 제대로 비교하지 못해서 원하는 결과 못 얻음. 이럴 땐 round() 함수를 이용함. round(123.456, 2) ⇒ 123.46

  • String (Immutable)

    • 문자열 : “string”

      • 문자열 변수를 초기화 할 때는 큰따옴표나 작은 따옴표 이용( 작은 따옴표와 큰 따옴표 섞어 쓰면 안됨. )
      • 값을 변경할 수 없음
      • 값의 순서를 변경할 수 없음
      • “”” “”” (큰따옴표 or 작은따옴표 3개씩 쓰기 가능 → 엔터쳐서 사용할 때)
        my_str = """김씨가족
        이씨가족
        최씨가족
        """
        
        my_str
        '김씨가족\n이씨가족\n최씨가족\n'
      • 문자열 연산도 가능.
    • Formatting : 문자열을 좀 더 잘 표현하기 위함 퍼센트 연산자

      1. 옛날방식 : (%)를 사용 → C 서타일
      • %d (정수형) : 여러개의 포맷팅을 사용하고 싶을 땐 쉼표로 구분

        '%d %d' % (4, 7)
        '4 7'
      • %f (실수형) :

        '%f' % 3.14
        '3.140000'
      • %s (문자열) :

        my_str = 'My name is %s' % '이주원'
        my_str
        'My name is 이주원'
      1. 요즘방식 : ‘{ }’.format()

        # 요즘 방식
        '{} x {} = {}'.format(3, 7, 3*7)
        '3 x 7 = 21'
        
        'My name is {}'.format('조희진')
        'My name is 조희진'
        
        '{1} x {0} = {2}'.format(2,3,8) 
        # 주소 찾아서 넣을 수도 있음. 3이 {1}로, 2가 {0}으로, 8이 {2}로
        '3 x 2 = 8'
        
        # 옛날 방식
        '%d x %d = %d' % (3, 7, 3)
        '3 x 7 = 21'
        
        'My name is %s' % '조희진'
        'My name is 조희진'
    • Indexing : 각 문자열의 위치

      ❓ 왜 1이 아니라 0부터 시작하는가? 옛날엔 컴퓨터 성능이 안 좋아서 한 칸이라도 아끼기 위해 1이 아니라 0부터 시작했다고 함. 이 습관이 굳어져서 0부터 시작.

      • 공백도 인덱스 매겨짐

      • 인덱스를 거꾸로 매길수도 있음 (맨 마지막 글자의 주소가 -1임)

    • Slicing : 문자 썰어서 가져오기

      • 사용법 : 변수[시작위치:종료위치] → 떼 오는 방법은 위 그림을 잘 이해할 것

        문자열을 일부분 썰어 오다

      1. 처음부터 3번째까지 2. 2번부터 마지막글자까지
    • Split : string.split() → 문자열을 공백단위로 잘라주어 리스트로 만들어줌

      my_name = "김왼손의 왼손코딩"
      my_name.split()
      ['김왼손의', '왼손코딩']
      
      fruit_str = '거봉 수박 딸기 복숭아 포도 망고 배 참외 용과 키위'
      fruit_str.split()
      ['거봉', '수박', '딸기', '복숭아', '포도', '망고', '배', '참외', '용과', '키위'] 
      # 리스트 형으로 담김
      
      # 어떤 문자를 기준으로 잘라라
      
    • Docstring : 따옴표 세개 사용해서 쓰는 것, 이 자체도 주석이 될 수 있음

    • Escape Code

      특정한 기능을 하는 문자의 조합

      • \n : 줄바꿈
      • \t : 탭
  • Boolean

    True / False (예약어)

  • List (Mutable)

    • 리스트 : 여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형
      • my_List = [값1, 값2, 값3, ...]

      • 사용자 입장에서 C나 자바에서의 배열(Array)의 기능 뿐 아니라 연결 리스트의 기능 지원

      • C++의 STL vector와 기능적으로 유사

      • 리스트 대신에 배열 혹은 테이블이라고 부름

      • 리스트 : ([])에 원소 넣거나 쉼표(,)로 구분. 인덱스는 0부터 시작 ⇒ a = [3,5,4,3,2]

        → 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것을 인덱싱(Indexing)이라고 함.

      • 인덱스는 양의 정수, 음의 정수 모두 사용 가능

        a = [3, 5, 4, 3, 2]
        #    0  1  2  3  4
        #   -5 -4 -3 -2 -1
      • 리스트에서 연속적인 위치를 갖는 원소들을 가져와야 할 때 슬라이싱(Slicing)을 이용

        • 대괄호 안에 콜론(:)을 넣어서 시작 인덱스와 끝 인덱스를 설정
        • 끝 인덱스는 실제 인덱스 보다 1을 더 크게 설정 → 인덱스 1부터 4까지 가져오겠다 하면 a[1:5]
      • 리스트 초기화 (리스트 컴프리 헨션)

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

          # 0 ~ 9까지의 수를 포함하는 리스트
          array = [i for i in range(10)]
          
          # 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
          array = [ i for i in range(20) if i % 2 == 1 ]
          
          # 1부터 9까지의 수들의 제곱 값을 포함하는 리스트
          array = [i*i for i in range(1, 10)]
        • 2차원 리스트를 초기화할 때 효과적으로 사용

        • N * M 크기의 2차원 리스트를 초기화 해야할 때 매우 유용

          • 좋은 예시 : array = [[0] * m for _ in range(n)] ⇒ for _ : 내부적으로 iterator 안 쓸 때 언더바로 표기
          • 나쁜 예시 : array = [[0] m] n ⇒ 모두 같은 객체로 인식해버림.
      • 리스트 함수

        | 함수명 | 사용법 | 설명 | 시간 복잡도 |
        | --- | --- | --- | --- |
        | append() | 변수명.append() | 리스트에 원소를 하나 삽입할 때 사용됨. → 리스트가 없는 상태에서 append를 쓰면 에러남. list가 꼭 있어야함. | O(1) |
        | sort() | 변수명.sort() | 기본 정렬 기능으로 오름차순으로 정렬한다. | O(NlogN) |
        | reverse() | 변수명.reverse() | 내림차순으로 정렬한다. | O(N) |
        | insert() | insert(삽입할 위치 인덱스, 삽힙할 값) | 특정한 인덱스 위치에 원소를 삽입할 때 사용한다. | O(N) |
        | count() | 변수명.count(특정 값) | 리스트에서 특정한 값을 가지는 데이터의 개수를 셀 때 사용한다. | O(N) |
        | remove() | 변수명.remove(특정 값) | 특정한 값을 갖는 원소를 제거하는데, 값을 가진 원소가 여러 개면 하나만 제거한다. | O(N) |

        → sort() : 메소드 (사용하는 것만으로도 객체의 값 자체를 바꿔줌)

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

        a.sort() ⇒ print(a) → [1,2,3,4,5]

        → sorted() : 내장함수 (값 자체를 안 바꿔줌)

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

        sorted(b) ⇒ print(b) → [1,5,2,4,3]

        → remove_All 함수는 없음.

    • Indexing : 리스트에 들어있는 인덱스에 맞춰 값을 가져올 수 있음 사용법 : 리스트[인덱스]
    • Del : 인덱스에 해당하는 값을 리스트에서 삭제함. 사용법 : del 리스트[인덱스] : 인덱스에 해당하는 값을 리스트에서 삭제함.
    • Slicing : 리스트에서 시작위치부터 종료위치에 해당 하는 원소들을 가져옴
  • Tuple (Immutable)

    • 튜플 : 튜플은 한 번 선언된 값을 변경할 수 없음.

      • 리스트는 대괄호[]를 이용하지만, 튜플은 소괄호()를 이용.

      • 튜플은 리스트에 비해 상대적으로 공간 효율적.

        my_Tuple = ('이곰돌', '이주원', '김광희', '이흥복')
        my_Tuple
        ('이곰돌', '이주원', '김광희', '이흥복')
        my_Tuple[0] = '이체니'
        # List에선 원소 값을 변경할 수 있지만 Tuple에선 불가능
        Traceback (most recent call last):
          File "<pyshell#100>", line 1, in <module>
            my_Tuple[0] = '이체니'
        TypeError: 'tuple' object does not support item assignment
    • Packing : 값을 모아다가 변수에 할당하는 행위

      my_tuple = 1, 2, 3
    • Unpacking : 튜플에 들어있는 원소를 변수에 나눠 할당하는 행위

      ```
      num1, num2, num3 = my_tuple
      num1
      1
      num2
      2
      num3
      3 
      
      #### num1을 2로 num1을 1로 바꾸고 싶을 때
      num1, num2 = num2, num1
      ```
    • Dictionary

    • 사전 : 키(Key)와 값(Value)의 쌍을 데이터로 가지는 자료형

      • 리스트나 튜플이 값을 순차적으로 저장하는 것과는 대비됨. → 딕셔너리는 관련된 자료를 서로 연관시켜놓음.
      • 원하는 '변경 불가능한(Immutable) 자료형'을 키로 사용.
      • 파이썬의 사전 자료형은 해시 테이블(Hash Table)을 이용하므로 데이터의 검색 및 수정에 있어서 O(1)의 시간에 처리 가능.
        # 사전 자료형 초기화 방법
        data = {'사과' : 'Apple', '바나나' : 'Banana', '코코넛' : 'Coconut'}
        data['사과'] 
        -> 'Apple'
        
        # 또 다른 초기화 방법
        data = dict()
        data['사과'] = 'Apple'
        data['바나나'] = 'Banana'
        data['코코넛'] = 'Coconut'
        
        # 키(Key)  값(Value)
        # 사과      Apple 
      • 특정 요소를 지우고 싶을 때 del 사용
        my_dict
        {0: 'juwon', 1: 'komdol', 2: 'kkh', 3: 'lhb', 'etc': 'stranger'}
        del my_dict['etc']
        my_dict
        {0: 'juwon', 1: 'komdol', 2: 'kkh', 3: 'lhb'}
      • 딕셔너리 메서드(특정 자료형에서만 쓸 수 있음)
        https://www.notion.so/Python-e5aaf3e3a5694082988c2d48c65579a1#cabc2b05f6ea4dcab5bc2cf5c040e26b

좋은 웹페이지 즐겨찾기