Programming/Python

[Python] Python 기초 (3) - 리스트 자료형

Boxya 2025. 3. 29. 14:25

[KT] AIVLE SCHOOL 2일차

 

리스트(List) 자료형

  • 여러 값을 묶어서 갖는 컨테이너 자료형 중 하나
    • 컨테이너 자료형 : 문자열(String), 리스트(List), 튜플(Tuple), 집합(Set), 딕셔너리(Dictionary)
  • 대괄호([ ]) 안에 콤마로 구분해 값을 나열하며, 이 값을 요소라고 부름
  • 리스트 필요성
    • 정수나 실수 등을 갖는 변수는 값 하나 만을 가지기 때문에 많은 데이터 처리가 힘들다.
    • 리스트는 여러 값을 요소로 가지기 때문에 많은 데이터 처리가 쉽다.
  • 리스트 특징
    • 어떠한 자료형도 요소로서 포함이 가능하며 요소 값이 중복될 수도 있음
    • 요소가 순서를 가지므로 특정 위치의 요소나 범위의 요소를 확인 가능
    • 또다른 리스트를 요소로 포함 가능 (List of List)

일반 변수와 리스트

  • 일반 변수를 사용한다면 5명 학생의 성적을 처리하기 위해 5개 변수, 50명 학생 성적을 처리한다면 50개 변수가 필요
  • 리스트를 사용하면 5명이든 50명이든 학생 성적을 리스트 하나로 처리 가능
  • 리스트는 sum() 함수로 합, max() 하수로 최댓값을 쉽게 구할 수 있음

리스트 생성

  • 비어있는 리스트 생성
    • list() 함수는 다른 자료형을 리스트로 변환하는 함수
      list1 = []
      list2 = list()
  • 리스트는 같은 자료형, 여러 자료형, 리스트를 요소로 가질 수 있음
    # 같은 자료형
    score = [85, 95, 90, 75]
    
    # 여러 자료형
    member = ['홍길동', 85, '한사랑', 95, '일지매', 90,'박여인', 75]
    
    # 리스트를 요소로
    score = [[80, 90, 75],
             [85, 70, 99],
             [90, 75, 80]]
  • range() 함수로 리스트 생성
    • 연속된 정수로 리스트를 만들 때 range() 함수를 사용하면 편리하다
    • range(n) : 0부터 n-1 까지 1씩 증가하는 정수 범위
    • range(m, n) : m부터 n-1 까지 1씩 증가하는 정수 범위
    • range(m, n, x) : m부터 n-1까지 x만큼씩 증가하는 정수 범위
    • range() 함수로 리스트를 만드는 것이 아니라 이 함수로 얻은 값을 리스트로 변환
    • range() 함수는 튜플, 집합, 딕셔너리 등을 만들 때도 사용 가능
      nums = list(range(10))
      nums = list(range(0, 10, 2))
  • 문자열로 리스트 생성
    • 문자열 하나를 요소로 갖는 리스트의 경우 '[ ]'를 이용할 때와 list 함수를 이용할 때의 결과 차이가 있음
      list_str = ['PYTHON']
      # ['PYTHON']
      
      list_str = list('PYTHON')
      # ['P', 'Y', 'T', 'H', 'O', 'N']

리스트 인덱싱

  • 리스트 안에서 특정 값을 찾을 때 사용하는 데이터를 인덱스(Index)라고 함
  • 인덱스로 특정 요소를 찾는 과정을 인덱싱(Indexing)이라고 함
  • 대괄호([ ]) 안에 인덱스를 지정 / e.g. list_str[1]
  • 0부터 시작하는 정수형 위치 인덱스를 사용해 위치의 요소를 확인 
  • 역방향 인덱스는 -1부터 시작 / e.g. list_str[-1] (마지막 요소)

리스트 슬라이싱

  • 인덱스를 사용해 특정 범위의 요소를 찾는 과정을 슬라이싱(Slicing)이라고 함
  • 대괄호안에 [m:n] 형태로 범위를 지정하여 요소를 확인
  • m부터 n-1 까지, 즉 n번째 요소는 결과에 포함되지 않음 / e.g. list_str[2:6]

리스트 연산

  • 리스트 연산은 문자열 연산과 같은 결과
  • 더하기는 결합, 곱하기는 반복을 의미하며 빼기와 나누기 연산은 불가능
  • 리스트를 더하면 두 리스트가 연결되며 복합 대입 연산자를 사용하여 리스트를 연결할 수도 있다.
  • 리스트에 양의 정수를 곱하면 그 수 만큼 요소가 반복된다. (0을 곱하면 빈 리스트가 된다)

리스트 요소 변경, 추가, 삭제

  • 인덱싱 또는 슬라이싱 결과에 대해 요소를 변경하거나 삭제할 수 있음
  • 인덱싱 또는 슬라이싱으로 값을 찾은 후 새로운 값을 대입 e.g. nums[1] = 10
  • append(), insert() 메서드를 사용해 요소를 추가할 수 있음
    • append() : 뒤에 요소 하나 추가 / e.g. nums.append(5) (맨 뒤에 요소 5 추가)
    • insert() : 원하는 위치에 요소 추가 / e.g. nums.insert(3, 30) (인덱스 3위치에 요소 30 추가)
  • 리스트에 리스트를 더하면 리스트가 연결됨
  • extend() 메서드를 사용해 리스트 뒤에 리스트를 붙일 수 있음
    • nums.extend([5, 6, 7, 8, 9]) (nums 리스트 뒤에 [5, 6, 7, 8, 9] 리스트 추가)
  • del 다음에 인덱싱 구문을 추가해 요소 삭제 가능
    • del nums[7] (nums 리스트의 인덱스 7위치의 요소 삭제)
    • 슬라이싱 구문을 이용한 범위 요소 삭제 가능
  • [ ] 를 대입하거나 clear() 메서드로 초기화(전체 삭제) 가능
    • nums = [] / nums.clear()

리스트 복사

  • 리스트 = 리스트 형태는 우리가 생각하는 복사가 아니며 범위를 지정한 복사가 완전한 복사
    • 원본이든 복사본이든 한 쪽 변경이 다른 쪽에 영향을 준다면 완전한 복사가 아님
    • nums_copy1 = nums (그냥 복사) / nums_copy2 = nums[ : ] (전체 범위를 지정하여 복사)
  • copy() 메서드를 사용하는 방법도 있음 e.g. nums_copy1 = nums.copy()

리스트 관련 메서드

  • 문자열 관련 메서드에 의한 변경은 변수에 바로 반영되지 않음
  • 하지만 리스트 관련 메서드에 의한 변경은 변수에 바로 반영
  • count() : 요소 개수 조회 e.g. score.count(100)
  • index() : 요소 위치 조회 e.g. score.index(100)
  • append() : 요소 하나 추가 e.g. score.append(85)
  • reverse() : 요소 순서 뒤집기 e.g. score.reverse()
  • sort() : 요소 순서 변경 e.g. score.sort(reverse=True) / reverse = True : 내림차순, False일 경우 오름차순
  • insert() : 지정한 위치에 요소 추가 e.g. score.insert(3, 30)
  • remove() : 요소 삭제 e.g. score.remove(30)
  • pop() : 요소 삭제 후 해당 값 반환 e.g. score.pop(3) (4번째 요소 pop)
  • clear() : 모든 요소 삭제 e.g. score.clear()