오늘은 자료 구조 수업 때 배운 리스트를 소개해보겠습니다. 제가 듣고 있는 수업은 “쉽게 배우는 자료구조 with 파이썬”라는 책을 주교재로 수업하고 있습니다. 앞으로 자료 구조에 대한 첨부 이미지나 예제는 교재를 이용합니다. 이 점 참고하시길 바랍니다.

  1. 리스트란?

    리스트란 쉽게 이야기 하면 줄 세워져 있는 데이터라고 볼 수 있습니다. 실생활에서도 자주 쓰는 말인데요! 리스트의 ADT(abstract data type, 추상 자료형)를 살펴보면서 이해해보겠습니다.

    • 리스트의 ADT
     i번 자리에 원소 x를 삽입한다
     i번 원소를 삭제한다
     원소 x를 삭제한다
     i번 원소를 알려준다
     원소 x가 몇 번 원소인지 알려준다
     리스트 사이즈(원소의 총 수)를 알려준다
    

    리스트는 파이썬에서 기본 자료 구조로 제공하고 있습니다. 자세한 예시들과 함께 이해해보겠습니다.

  2. 배열 리스트

    리스트의 객체 구조

     a = []
     b = [2,5,7]
    

    파이썬에서 위와같이 변수를 선언하면 리스트를 이용할 수 있습니다. a 리스트에는 아무것도 없고, b 리스트에는 int값이 2,5,7 세 개의 원소가 있네요. 리스트에서 (아마 대부분 모든 언어의 배열에서) 맨 앞자리는 0번입니다. 즉 b리스트의 0번 원소는 2, 1번 원소는 5가 되겠네요.

    이 이미지는 파이썬에서 리스트가 가지고 있는 함수들을 나타냅니다. 아래에서 어떻게 사용하는지 알아보겠습니다.


    리스트의 작업

     a = [1, 3, 5, 6, 7]
    
    • 원소 삽입

    (1) i번 원소로 x 삽입

       a.insert(1, 'Mon')
       # output -> [1, 'Mon', 3, 5, 6, 7]
    

    (2) 리스트 뒤에 원소 x 삽입

       a.append('Mon')
       # output -> [1, 3, 5, 6, 7, 'Mon']
    
    • 원소 삭제

    (1) i번 원소 삭제

       a.pop(3)
       a.pop(-1)
       """
       output
       [1, 3, 5, 7]
       [1, 3, 5, 6]
       """
    

    (2) 명시한 원소 삭제

       a.remove(5)
       # output -> [1, 3, 6, 7]
    
    • 기타 작업
     a = [1, 3, 5, 6, 7]
     b = [2, 4, 1, 5, 7]
    
     # 명시한 원소의 자리 번호 알림
     a.index(5) # -> 2
    
     # 리스트 비움
     a.clear() # -> []
    
     # 나열 가능한 객체를 덧붙임
     a.extend([10,20]) # -> [1, 3, 5, 6, 7, 10, 20]
    
     # 리스트 뒤집음
     a.reverse() # -> [7, 6, 5, 3, 1]
    
     # 리스트 정렬
     b.sort() # -> [1, 2, 4, 5, 7]
    

    리스트 정렬 같은 경우는 같은 같은 변수타입만 정렬이 가능합니다. 만약 문자열을 정렬할 경우 사전 순서로 정렬됩니다.(아마도 정확히는 아스키 코드 순서로 정렬되지 않을까싶은데 정확히 찾아보진 않았습니다ㅎㅎ)


    파이썬 내장 리스트의 한계

    원소 삽입 시 문제 그림

    원소 삭제 시 문제 그림

    꽉 차있는 상태에서 삽입 시

    그림에서 볼 수 있듯이 파이썬 내장 리스트를 이용할 때 원소 삽입 시, 원소 삭제 시 원소를 한 칸 씩 일일이 움직여야 하는 과정을 거쳐야 합니다. 이런 경우 연산 처리 시간이 오래 걸립니다. 또한, 꽉 차있는 상태에서 삽입 시 새 배열 할당 후 삽입해야 합니다. 이러한 문제를 해결하기 위해서 연결 리스트를 이용합니다.

다음 포스트에는 연결 리스트에 대해 이야기해보겠습니다!! 오늘은 여기서 마무리하겠습니다.😊😊