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()
- 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']
- 문자열 하나를 요소로 갖는 리스트의 경우 '[ ]'를 이용할 때와 list 함수를 이용할 때의 결과 차이가 있음
리스트 인덱싱
- 리스트 안에서 특정 값을 찾을 때 사용하는 데이터를 인덱스(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()