ABOUT ME

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

Today
Yesterday
Total
  • 파이썬 문법(자료형, 입출력)
    카테고리 없음 2023. 2. 1. 23:49

    ▶실수형 표기

    . 만 붙이면 저절로

    a = 5.

    b = .7

    print하면 5.0 과 0.7로 출력 됨

     

     e또는 E를 이용한 지수표기

    숫자e^지수 = 숫자*10^지수 (숫자 x 10의 N제곱)

    예를 들어 1e9는 1*10^9 = 1,000,000,000(10억)

    가령, 그래프 알고리즘 등에서 임의이 큰 수를 무한(INF)로 설정할 때, 가능한 최댓값이 10억 미만이라면 INF = 1e9 로 표기하는 등 이용한다.

    이건 실수형 데이터이므로 정수형 데이터로 처리해야하는 상황(혹은 실수연산 오차 막고자 할때)이면  a = int(1e9) 이런식으로 형변환 해주면 된다.

     

     round()

    파이썬은 IEEE754표준. 실수형 정보를 표현할 때 정확하지 않다.

    0.3 + 0.6을 0.9로 가지지 못하고 0.89999999로 처리하는 것.

    이를 해결하기 위해 round()사용. 특정 자릿수에서 반올림이 가능

    123.456을 셋째 자리에서 반올림 => round(123.456, 2)로 작성.

    셋째 자리에서 반올림 == 2째 자리까지 표시 => round(123.456, 2)

     

     

    ▶ 연산자

    나누기 (/) 결과를 실수형으로 반환(즉, 정확하지 않을 가능성)

    몫 연산자(//)

    거듭제곱 연산자(**)

     

    - List(table, array의 역할도 함)

    array의 기능 + linked list와 유사한 기능 지원

    append(), remove()가능

    #배열 초기화 & 배열 전체 출력
    a = [1,2,3,4,5]
    print(a)
    =>[1,2,3,4,5]
    
    #4번째 원소 출력(인덱싱)
    print(a[3])
    =>4
    
    # 크기가 N, 모든 값이 0인 1차원 리스트 초기화
    n = 3
    a = [0] * n
    =>[0,0,0]

     

    ▶ 인덱싱 Indexing(특정 원소 접근)

    음의 정수로도 접근 가능(거꾸로 탐색)

    a = [1,2,3,4,5,6,7,8,9]
    
    print(a[7])
    =>8
    
    print(a[-1])
    =>9
    
    print(a[-3])
    =>7

     

    ▶슬라이싱 Slicing(연속적인 위치를 갖는 원소 접근)

    대괄호 안에 콜론(:) 넣어서 시작인덱스, 끝 인덱스 설정

    끝 인덱스는 실제 인덱스보다 1 더 크게 설정.

    a = [1,2,3,4,5,6,7,8,9]
    
    #index 1부터 3까지 (2번째 원소~4번째 원소까지)
    print(a[1 : 4])
    =>[2,3,4]

    리스트에서 일부분을 추출 가능한 것.

     

    ▶ 리스트 컴프리헨션

    대괄호 안에 조건문/반복문을 넣음으로써 리스트를 초기화 하는 방법

    arr = [i for i in range(10)]
    
    print(arr)
    =>[0,1,2,3,4,5,6,7,8,9]
    #0~19까지 홀수만 포함하는 리스트
    arr = [i for i in range(20) if i % 2 == 1]
    print(arr)
    =>[1,3,5,7,9,11,13,15,17,19]
    
    #2부터 9 까지 수들의 제곱 값을 포함하는 리스트
    arr = [i * i for i range(2,10)]
    print(arr)
    =>[4,9,16,25,36,49,64,81]

     

    ▶리스트 관련 메서드

    append() 리스트에 원소 하나 삽입 O(1)
    sort() 오름차순 정렬. 내림차순은 sort(reverse=True) O(NlogN)
    reverse() 원소 순서를 모두 뒤집음 O(N)
    insert() 특정 위치에 원소 삽입 O(N)
    count() 특정 값을 가지는 데이터 개수 O(N)
    remove() 특정 값을 갖는 원소 제거.(여러개면 하나만 제거) O(N)

     

    ▶ 문자열 자료형

    덧셈연산으로 이어붙이고, 곱셉연산으로 여러번 이어붙일 수 있다.

    인덱싱과 슬라이싱이 가능하지만, 값을 변경할수는 없다.(가져올수만 있다)

     

    ▶ 튜플 자료형

    리스트와 유사. 다만 튜플은 한 번 선언된 값 변경 불가.

    소괄호() 사용, 리스트보다 공간 효율적. (값 변경 등 기능이 제한적이므로)

    튜플이 유용한 경우
    1. 서로 다른 성질의 데이터를 묶어 관리할 때(학번&등수 등 string과 int를 묶어야 한다면 )
    2. Hashing의 키 값으로 사용할 때(변경이 불가능하다는 특징에 따라)
    3. 메모리를 더 효율적으로 사용해야 할 때

     

    ▶ 사전 자료형

    키&값 쌍을 데이터로 가짐.

    리스트/튜플이 값을 순차적으로 저장하고 인덱스로 접근했던 것(순차적 저장)과 달리, 얘는 키 값으로 원소 접근.

    파이썬에서 이 자료형은 내부적으로 Hash Table을 이용함. 따라서 데이터 조회&수정 시간복잡도가 O(1) => 리스트보다 훨씬 빠름

    data = dict()
    
    data['키'] = '값'
    data['사과'] = 'apple'
    data['바나나']='banana'
    
    if '사과' in data:
      print('사과를 key로 가지는 value가 존재합니다.')
    data = dict()
    
    data['키'] = 'value'
    data['사과'] = 'apple'
    data['바나나']='banana'
    
    print(data.keys())
    print(data.values())
    
    for i in data.keys():
      print(data[i])
    a = {
      '홍길동':24,
      '왕감자':12,
      '김철수':42
    }
    print(a)

     

    ▶ 집합 자료형

    중복 허용X, 순서X

    리스트나 문자열을 이용해서 초기화 가능.(set()함수 사용)

    data = set([1,1,2,3,3,3,4,5])
    
    print(data) #중복 제거된 모습.
    => {1,2,3,4,5}

    혹은 중괄호 사용해서 초기화

    data = {1,1,2,3,4,5,5}
    print(data)
    =>{1,2,3,4,5}

    합집합, 교집합, 차집합 연산 가능

    #집합 2개 초기화
    a = set([1,2,3,4,5])
    b = set([3,4,5,6,7])
    
    #합집합
    print(a | b)
    => {1,2,3,4,5,6,7}
    
    #교집합
    print(a & b)
    =>{3,4,5}
    
    #차집합
    print(a - b)
    =>{1,2}

    원소 추가할때는 add(값)

    원소 여러개 추가할때는 update([값1, 값2, 값3])

    원소 지울때는 remove(값)

     

    리스트 튜플 사전 자료형 집합
    인덱싱 가능 순서X, 인덱싱 불가. 시간복잡도 O(1)

     

    ▶ 기본 입출력

    input() 한 줄의 문자열을 입력받음
    map() 리스트의 모든 원소에 각각 특정한 함수를 적용

    예) list(map(int, input().split()))

    => <input()을 공백 기준으로 split>한 것을 리스트로 생성. 리스트의 모든 원소에 int()로 형변환

     

    예) a, b, c = map(int, input().split())

    => 데이터 적어서 굳이 리스트까지 안 만들어도 될 때

     

    - 빠른 입력 방법

    import sys 하여 sys.stdin.readline() 사용. 

    단, 입력 후 엔터가 줄 바꿈 기호로 입력되므로, rstrip()를 함께 사용해서 제거

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

     

    ▶ 표준 출력 방법

    기본 출력은 print()이며 이는 출력 후 줄 바꿈 수행. 줄바꿈 원하지 않으면 end속성을 바꿔주면 됨.

    각 변수는 콤마(,)를 이용해 띄어쓰기하여 출력 가능

    a = 1
    b = 2
    print(a, b) # 콤마 이용해 a와 b를 띄워쓰기해 출력
    => 1 2
    
    print(7, end=" ") # end속성 이용해 줄바꿈이 아닌 " "를 넣도록
    print(e, end=" ")
    
    answer = 7
    print("정답은 " + str(answer) + "입니다.") # 문자열과 정수를 직접 더하기연산 안 되므로 정수answer을 str()함수 통해 문자열로 변환
    => 7 8 정답은 7 입니다.

     

    ▶ f string

    특정 문장을 더 간단하게 출력

    문자열 앞에 접두사 f를 붙여 사용

    ans = 7
    print(f"정답은 {ans}입니다.")
    =>정답은 7입니다.

    직전 예제처럼 굳이 정수를 문자열로 바꿔주고 할 필요가 없다.


    출처

    https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC

Designed by Tistory.