Python 문법 정리 - 자료형

SummerToday·2024년 6월 27일
0
post-thumbnail
post-custom-banner

코딩 테스트를 대비하여 기본적인 파이썬 문법들을 정리하기로 하였다.

수(Number) 자료형

코딩 테스트의 대부분의 문제에서는 실수형이 아니라 정수형을 다루게 된다.


정수형

  • 정수를 다루는 자료형.

  • 양의 정수, 음의 정수, 0 존재.

  • 코딩 테스트의 대부분 문제들의 입출력 형태는 정수형.

cf. 파이썬은 기본 자료형이 사전 자료형 기능을 지원하기 때문에, 별도의 라이브러리를 사용하지 않아도 된다.


실수형

  • 소수점 아래의 데이터를 포함하는 자료형.

  • 변수의 타입 없이, 변수에 소수점을 붙이면 자동으로 실수형 변수로 처리된다.

  • 소수부 0 or 정수부 0은 생략 가능. ex. 5. , -.7, ...

  • 유효숫자e^지수 = 유효숫자 10^지수 형태로 지수를 표현할 수 있다. ex. 1e8 = 110^8, 123e-3 = 0.123

cf. 최단 경로의 최댓값 INF를 대체하여 1e9(10^9)과 같은 형태로 표현 가능.

  • 실수끼리의 연산은 예상과 다를 수 있다.

    컴퓨터는 실수형을 저장하기 4바이트나 8바이트의 고정된 메모리를 할당하기 때문에 실수를 정확히 표현하지 못하기 때문이다.

    ex. a = 0.3 + 0.2, a == 0.5 -> false

    따라서 반올림 함수인 round(실수형 데이터, 반올림할 자릿수 - 1) 함수를 호출하여 위 문제를 해결한다. ex. round(1.234,2) = 1.23


수 자료형 연산

  • 파이썬의 사칙연산은 나누기 연산자(/)를 제외하고는 나머지 프로그래밍 언어와 동일.

  • 나머지 연산(/)은 실수형으로 처리.

  • 몫 연산자(//)가 따로 존재.

  • 거듭제곱 연산자(**) 존재. ex. 3 ** 5 = 45



리스트 자료형

  • a = [1, 2, 3]와 같은 형태.

  • 인덱스는 0부터 시작.

  • 요소 접근 -> a[i]


리스트 선언

  • 빈 리스트 선언 -> a = list() or a = []

  • ex. 크기가 n이고 모든 값이 0인 1차원 리스트 초기화

    n = 5
     a = [0] * n
     print(a) // 출력 결과 : [0, 0, 0, 0, 0]

인덱싱과 슬라이싱

  • 인덱싱(Indexing) : 리스트의 특정 원소에 접근하는 것. (양, 음의 정수 모두 가능. 음의 정수 - 리스트 거꾸로 탐색)

    a = [1, 2, 3] // ex a[-1] : 뒤에서 첫번째 원소 출력, a[3] : 네번째 원소 출력
     a[3] = 4 // a의 세번째 원소 4로 변경.
    
  • 슬라이싱(Slicing) : 리스트에서 연속적인 위치를 갖는 원소들을 가져오는 것.

    ex. a리스트의 세번째 원소부터 다섯 번째 원소의 데이터 추출 -> a[2 : 5] // a[2], a[3], a[4] 추출


List Comprehension

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

  • 해당 방법 이용 시, 대괄호 안에 조건문과 반복문을 삽입하여 리스트를 초기화 할 수 있다.

    ex . array = [i for i in range(10) if i % 2 = 0] // 0~9까지의 수 중 짝수만 포함하는 리스트를 만들 때.
    -> 결과 : [2, 4, 6, 8]

    ex 2. array = [i * i for i in range(1, 5)] // 1부터 4까지 수의 제곱 값을 포함하는 리스트를 만들 때.
    -> 결과 : [1, 4, 9, 16, 25]

  • 특정 크기의 2차원 배열을 초기화 할 때 사용해야 한다.

    ex. array = [[0] * b for _ in range(n)] // a * b 크기의 2차원 리스트 초기화, a = 2, b = 3
    -> 결과 : [[0, 0, 0], [0, 0, 0]]

    ex 2. array[1][1] = 5
    -> 결과 : [[0, 5, 0], [0, 5, 0]] // bc. 내부적으로 포함된 2개의 리스트가 모두 동일한 객체에 대한 2개의 레퍼런스로 인식.

    cf. 단순 반복 출력처럼 반복을 위한 변수의 값이 필요가 없을 때는 _를 사용한다.
    ex. Hello World 5번 출력

    for _ in range(5)
      print("Hello World")

리스트 관련 메서드

  • append() : 리스트에 원소 하나를 삽입할 때 사용. - 시간 복잡도: O(1)

    변수명.append()

  • sort() : 기본 정렬 기능으로 오름차순으로 정렬한다. - 시간 복잡도: O(NlogN)

    변수명.sort()

  • reverse() : 리스트의 원소의 순서를 역순으로 바꾼다. - 시간 복잡도: O(N)

    변수명.reverse() or 변수명.reverse(reverse = True) // 내림차순

  • insert() : 특정한 인덱스 위치에 원소를 삽입할 때 사용한다. - 시간 복잡도: O(N)

    변수명.insert(삽입할 위치 인덱스, 삽입할 값)

  • count() : 리스트에서 특정한 값을 가지는 데이터의 개수를 센다. - 시간 복잡도: O(N)

    변수명.count(특정 값)

  • remove() : 특정한 값을 갖는 원소를 제거하지만, 값을 가진 원소가 여러 개면 하나만 제거한다. - 시간 복잡도: O(N)

    변수명.remove(특정 값)

  • 예시

a = [1, 2, 3]
print("리스트: ", a) // 출력 -> 리스트: [1, 3, 2]

a.append(4)
print("리스트: ", a) // 출력 -> 리스트: [1, 3, 2, 4]  

a.sort()
print("리스트: ", a) // 출력 -> 리스트: [1, 2, 3, 4]

a.insert(2,5)
print("리스트: ", a) // 출력 -> 리스트: [1, 2, 5, 3, 4]

print("값이 2인 원소의 개수: ", a.count(2)) // 출력 -> 값이 2인 원소의 개수: 1

a.remove(1)
print("값이 1인 원소 제거: ", a) // 출력 -> 값이 1인 원소 제거: [2, 5, 3, 4]

cf. insert() 함수 사용 시 원소의 개수가 N개면 시간 복잡도는 O(N). append() 함수는 시간 복잡도 O(1).
따라서 insert() 함수를 많이 사용하면 시간 초과로 테스트를 통과하지 못할 수 있다.

cf. remove()의 시간 복잡도 O(N)이므로, 많이 사용 시 시간 초과 문제가 발생할 수 있다.
remove()와 insert() 함수의 시간 복잡도는 원소의 위치를 조정하는 과정이 있어 O(N)이 된다.

따라서, 특정한 값의 원소를 모두 제거할 시 다음과 같은 방식을 사용하는 것이 좋다.

a = [1, 2, 3, 4, 4, 5]
reomve_set = [2, 4]
result = [i for i in a if i not in remove_set] // remove_set에 없는 원소만은 result에 저장.
print(result) // 출력 -> [1, 3, 5]

문자열 자료형


문자열 초기화

  • 문자열은 큰 따옴표, 작은 따옴표로 둘다 선언 가능.

  • 큰 문자열 안에 작은 따옴표 사용 가능. 반대도 가능.

  • 백슬래시(\) 사용시 문자열 안에서 작은 따옴표, 큰 따옴표 사용 가능.

  • ex.

    print('hello world') // 출력 -> hello world
    
    print("hello \"Python\"!") // 출력 -> hello "Python"!

문자열 연산

  • 덧셈을 할 시 문자열끼리 연결이 된다.

    "Hello" + " " + "World" // 결과 -> Hello World

  • 문자열 변수를 양의 정수와 곱하는 경우, 문자열이 그 값만 큼 더해진다.

    a = "Hello"
    print(a * 3) // 출력 : HelloHelloHello

  • 문자열은 내부적으로 리스트와 같이 처리. 인덱싱, 슬라이싱 가능.

    a = "abcd"
    print(a[1 : 3]) // 출력 -> bc


튜플 자료형

  • 한번 선언된 값을 변경할 수 없다.

  • 리스트는 대괄호, 튜플은 소괄호를 사용한다.

  • 그래프 알고리즘 구현 시 자주 사용한다.

  • 리스트에 비해 공간 효율적이고, 각 원소의 성질이 다를 때 주로 사용한다.

  • ex.

    a = (1, 2, 3)
    a[2] = 4 // 오류 발생

사전 자료형

  • 순서 x -> 인덱싱으로 값을 얻지 못한다.

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

  • 내부적으로 해시 테이블(Hash Table)을 이용하기 때문에, 데이터의 검색 및 수정의 시간 복잡도는 O(1)이다.

  • 리스트보다 데이터 처리 속도가 빠르다.

  • '원소 in 사전'의 형태를 사용하여 특정한 원소가 있는지 검사 할 수 있다.

  • ex.

    data = dict()
    data['korea'] = '한국'
    data['japanese'] = '일본'
    data['china'] = '중국'
    
    print(data) // 출력 -> {'korea': '한국', 'japanese': '일본', 'china': '중국'}
    
    if 'korea' in data
        print("'한국'을 키로 가지는 데이터 존재.") // 출력 -> '한국'을 키로 가지는 데이터 존재.
    

사전 자료형 관련 함수

  • keys() : 키 데이터만 뽑아서 리스트로 생성

  • values(): 값 데이터만 뽑아서 리스트로 생성

 data = dict()
 data['korea'] = '한국'
 data['japanese'] = '일본'
 data['china'] = '중국'
 
 key_list = data.kets()
 value_list = data.values()
 
 print(key_list) // 출력 -> dict_keys(['korea', 'japanese', 'china'])
 print(value_list) // 출력 -> dict_values(['한국', '일본', '중국'])
 
 for key in key_list
     print(data[key])  
 // 출력 -> 한국
           일본
           중국
          

집합 자료형

  • 중복 허용 x

  • 순서 x -> 인덱싱으로 값을 얻지 못한다.

  • 값 데이터만 존재.

  • 특정 원소 검색 시간 복잡도 O(1)

  • 특정한 데이터가 이미 등장한 적이 있는지 여부를 체크할 때 매우 유용하다.

  • ex.

    data = set([1, 1, 2, 2, 3, 3]) // 집합 초기화 방식 1
    print(data) // 출력 -> {1, 2, 3}
    
    data = {1, 1, 2, 2, 3, 3} // 집합 초기화 방식 2
    print(data) // 출력 -> {1, 2, 3}

집합 자료형 연산

data_1 = set([1, 2, 3])
data_2 = set([2, 3, 4])

print(a | b) // (합집합) 출력 -> {1, 2, 3, 4}
print(a & b) // (교집합) 출력 -> {2, 3}
print(a - b) // (차집합) 출력 -> {1, 4}

집합 자료형 관련 함수

  • add(): 하나의 값을 추가할 때 사용.

    data = set([1, 2, 3])
    data.add(4)
    print(data) // 출력 -> {1, 2, 3, 4}

  • update(): 여러 개의 값을 한꺼번에 추가하고자 할 때 사용.

    data.update([5, 6])
    print(data) // 출력 -> {1, 2, 3, 4, 5, 6}

  • remove(): 특정한 값을 제거할 때 사용.

    data.remove(3)
    print(data) // 출력 -> {1, 2, 4, 5, 6}



해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
나동빈, ⌜이것이 취업을 위한 코딩 테스트다 with 파이썬⌟, 한빛미디어, 2020, 604쪽
profile
IT, 개발 관련 정보들을 기록하는 장소입니다.
post-custom-banner

0개의 댓글