❰리스트 자료형❱
-리스트 자료형에 대해 배워봅시다.
⌘리스트의 파이썬의 기본 자료형이기도 하며 또한 동시에 데이터를 순처적으로 저장하는 자료구조 이기도 합니다.
그래서, 리스트 자료형(자료구조)라고도 합니다.자료 구조적 관점도 있지만 추후 정리해보겠습니다. 지금은 자료형에서의 관점으로 정리하겠습니다.
▶리스트 자료형이란?
리스트 자료형은 여러 개의 값을 순서대로 저장할 수 있는 데이터의 구조를 의미합니다.쉽게 말해, 다양한 종류의 데이터(숫자, 문자열, 다른 리스트 등)를 하나의 변수 안에 담아 관리할 수 있는 '목록'이라고 생각하시면 됩니다.예를 들어 1부터 10까지의 숫자가 있는데 이 중 짝수와 홀수의 수의 모음을 따로 지정하고 싶다고 가정해보겠습니다. 이럴 때 바로 리스트를 사용하시면 됩니다. 아래 예제를 들어보겠습니다.
A = [1,3,5,7,9] #홀수모음
B = [2,4,6,8,10] #짝수모음
이와 같이 변수에 대괄호[]를 사용하여 안에 정수, 실수, 문자열, 불리언, 다른 리스트등을 저장하고 콤마(,)로 구분하여 각 요소들을 나열하는 방식으로 생성하는 것이 리스트입니다.
물론, 리스트를 사용 안하고 숫자형이나, 문자열을 사용하여 나열 할 수 있지만 복잡하고 가독성이 떨어지므로 리스트를 활용하여 정리하는 것이 훨씬 효율적입니다.
▶리스트의 특징
리스트의 주요 특징은
첫번째, 순서가 있습니다(Ordered) 리스트에 저장된 값들은 순서가 있으며, 이 순서는 인덱스(index)를 통해 접근 할 수있습니다.
(인덱스의 순서는 동일 첫번째 요소는 0, 두번째 요소는 1)
두번째, 변경이 가능합니다(Mutable) 리스트가 생성된 후에도 내부의 요소를 변경(추가, 삭제, 수정)할 수 있습니다. 이 점은 문자열이나 튜플과 같은 불변성이 있는 자료형과의 가장 큰 차이점입니다.
세번째, 다양한 자료형이 저장가능 합니다(Heterogeneous) 하나의 리스트 안에 정수, 실수, 문자열, 불리언, 심지어 다른 리스트등 여러 종류의 자료형을 함께 저장 할 수 있습니다.
네번째, 중복된 값이 허용됩니다(Allows Duplicates) 리스트 안에 동일한 값을 여러 번 저장할 수 있습니다.
다섯번째, 대괄호[ ] 표현으로 가독성을 높입니다, 리스트는 대괄호[ ] 안에 콤마(,)로 구분하여 요소들을 나열하는 방식으로 생성합니다.
▶리스트인덱싱과 슬라이싱
리스트는 여러 요소를 담을 수 있고 각 요소들은 고유한 인덱스를 가집니다. 특정 요소를 인덱싱하거나, 여러 요소를 한 번에 슬라이싱 할때 사용하는며 이게 리스트의 인덱싱과 슬라이싱입니다.
①리스트 인덱싱
문자열 인덱싱과 차이점은 별로 없지만, 주요 차이점이라면, 리스트 안에 또다른 리스트를 포함 할 수 있다는 점이며, 이를 중첩 리스트라고 합니다. 중첩 리스트의 요소를 인덱싱하려면 인덱스를 두 번 이상 사용해야 합니다.
예시처럼 음수 인덱스도 사용 가능합니다. 음수 인덱스는 리스트의 뒤에서부터 요소를 가리킬 때 유용하게 쓰입니다 (-1은 마지막 요소, -2는 뒤에서 두 번째 요소 등).
중첩 리스트의 인덱싱에 대해 조금 더 설명하겠습니다.
중첩 리스트의 인덱싱은 러시아 인형처럼 겹겹이 들어가 있는 구조를 이해하는 것이 핵심입니다. [1, 2, 3, [4, 5, 6, [7, 8]]] 이라는 리스트를 예시로 살펴보겠습니다.
가장 바깥 리스트 : 1은 0번 인덱스,2는 1번 인덱스, 3은 2번 인덱스, [4, 5, 6, [7, 8]] 이 리스트 전체가 3번 인덱스가 됩니다.
3번 인덱스 안의 리스트 ([4, 5, 6, [7, 8]]): 4는 0번 인덱스, 5는 1번 인덱스, 6은 2번 인덱스, [7, 8] 이 리스트 전체가 3번 인덱스가 됩니다.
그 안의 3번 인덱스 안의 리스트 ([7, 8]): 7은 0번 인덱스, 8은 1번 인덱스
이처럼 각 인덱스 대괄호 []가 한 단계씩 안으로 들어가는 '문' 역할을 한다고 생각하시면 됩니다. 원하는 값을 찾아갈 때마다 해당 레벨의 인덱스를 지정하여 접근하면 됩니다.
즉, 이 값에서 7이라는 숫자를 출력하고 싶다고 하면은, [3][3][0]이라는 인덱싱으로 출력 하시면 되겠습니다.
②리스트 슬라이싱
리스트 슬라이싱은 리스트의 특정 범위를 지정해서 그 부분만을 새로운 리스트로 잘라내는(추출하는) 기능입니다.
리스트 슬라이싱의 규칙은, 리스트이름[시작인덱스 : 끝인덱스 : 스텝]이며 여기서 스텝은 선택사항이므로 리스트이름[시작인덱스 : 끝인덱스]까지만 사용하셔도 됩니다.(문자열 슬라이싱과 차이 없음)
문자열의 슬라이싱과 차이는 인덱싱과 마찬가지로 중첩 리스트에 있습니다.그리고 원하는 정보를 얻기 위해 바깥 리스트부터 차례대로 한 단계씩 잘라내는 과정이라고 생각하시면 됩니다.
위 예제는 일반적인 리스트 슬라이싱이며 문자열에서 배웠던 슬라이싱 규칙과 다른 점은 없습니다.
중첩 리스트 슬라이싱입니다. 복잡할 수 있어 조금 부가 설명을 붙히면은
리스트 슬라이싱을 하기전 중첩인덱싱을 통해 먼저 원하는 리스트까지 접근을 해야하며,
그 접근한 리스트에 슬라이싱을 적용해 필요한 부분을 잘라내는(추출) 것입니다.
즉, 짧게 [1,[2,[3,4,5]]]이라는 중첩 리스트가 있습니다. 여기서 4,5라는 결과값을 추출하려고 합니다.
먼저, 가장 바깥쪽 리스트를 인덱싱합니다, [1], 그 후 인덱싱 된 [2,[3,4,5]]를 한번 더 인덱싱 합니다.
그럼 [3,4,5]라는 리스트까지 접근을 하였고 여기서 슬라이싱[1:]을 하여 4,5를 출력하시면 되겠습니다.
최종적으로 [1][1][1:]이라는 코드가 나오면 되겠습니다.
▶리스트 연산하기
리스트를 숫자처럼 덧셈, 곱셈, 같은 다양한 연산을 수행할 수 있습니다.
첫번째, 리스트 더하기(+)
두 개 이상의 리스트를 합쳐서 새로운 리스트를 만들 때 사용합니다.
주의할 점은 기존의 리스트를 변경하지 않으며 항상 새로운 리스트를 반환합니다
예제를 통해 배워 보겠습니다.
위 예제를 보시는 것과 같이 list1, list2를 합쳐서 새로운 하나의 리스트로 만드는 것을 보실 수 있습니다.
이처럼 리스트를 합쳐 직원의 명단을 합치거나, 장바구니에 쇼핑목록을 합칠 때 사용할 수 있습니다.
두번째, 리스트 반복하기(*)
리스트를 특정횟수만큼 반복해서 새로운 리스트를 만들 때 사용합니다. 하나의 리스트를 여러 리스트로 복제하는 것이라 생각하면 됩니다. 주의 할 점은 리스트 안의 요소 자체가 복사되는 것이 아니라, 리스트 자체가 반복되는 개념입니다. 만약 중첩 리스트에서 * 연산을 잘못 사용하면 예상치 못한 결과가 나올 수 있으니 주의해야 합니다.
예제를 통해 배워 보겠습니다
위 예제를 보시는 것과 같이 list3에 * 연산자를 사용하여 3번 반복하시는 걸 볼 수 있습니다.
특정 크기의 리스트를 같은 값으로 초기화하거나, 패턴이 반복되는 리스트를 만들 때 사용합니다.
세번째, 리스트 길이 구하기(len())
리스트 안에 요소가 총 몇 개 들어 있는지 그 개수를 알고 싶을 때 len()함수를 사용합니다
예제를 통해 배워보겠습니다.
위 예제를 보시는 것과 같이 list4라는 변수에 저장된 리스트의 개수를 추출해 오늘 걸 보실 수 있습니다.
문자열과 차이가 있다면 문자열은 공백을 포함하여 문자열의 개수를 추출해오는것이고
리스트는 대괄호([ ])안에 저장되어 있는 리스트의 개수를 콤마(,)를 기점으로 추출해 오는 것입니다.
리스트의 상태를 확인하고, 그에 따라 프로그램을 제어할 때 자주 쓰입니다.
네번째, 리스트에 요소가 있는지 확인하기(in)
리스트 내에 특정 요소가 저장 되어 있는지 존재여부를 확인할 때 in을 사용합니다
결과는 boolean함수의 형식으로 나타납니다. 즉, true와 false 형식으로 반환됩니다.
예제를 통해 배워 보겠습니다.
위 예제를 보시는 것과 같이 list5변수에 저장된 리스트 안의 값에 원하는 값이 저장되 있는지 존재여부를 확인할 때 사용합니다
리스트의 상태를 확인하고, 그에 따라 프로그램을 제어할 때 자주 쓰입니다.
다섯번째, 리스트의 수정과 삭제
리스트의 수정과 삭제입니다. 불변성을 가지지않고 변경가능한 자료형이기 때문에, 인덱싱이나 슬라이싱을 사용하여 특정 요소를 수정하거나 삭제 할 수 있습니다.
위 예제를 보시는 것과 같이 결과를 수정 및 삭제할 수 있습니다.
잘못된 데이터를 수정 및 삭제 하거나 상태를 업데이트 할 때 등 사용합니다.
또한 del이라는 함수를 이용해서도 삭제 할 수 있는데 방법은 아래 예제를 보시다 싶이 1,3이라는 결과 값이 나오게 됩니다.
a = [1,2,3] #a라는 변수에 1,2,3 리스트 저장
del a[1] #del함수로 1번인덱스 삭제
print(a) #결과값 : 1,3
▶리스트 함수
리스트 함수(List methods)는 리스트의 내용을 직접 변경하거나, 리스트에 대한 다양한 작업을 수행하는 도구들입니다. 리스트는 문자열과 달리 변경 가능(mutable)하기 때문에, 대부분의 리스트 함수는 원본 리스트를 직접 수정가능 하며 이전에 다뤘던 len(), in과 같은 연산자나 함수와는 다르게, 리스트 함수는 리스트이름.함수이름() 형태로 사용합니다.
첫번째, 요소 추가 및 확장함수 입니다.
요소추가 함수인 한번에 하나의 요소를 추가 할 때 사용하는 리스트변수이름.append(x)입니다. (x)는 x안에 추가하고 싶은 입력값을 넣어 주시면 되겠습니다.
요소를 확장 할 때 사용하는 함수인 리스트변수이름.extrend(x). 동일하게 x안에 추가할 입력값을 넣어 주시면 되겠습니다.
위 예제를 참고하여 주시면 되겠으며, 리스트에 추가하거나, 확장할 때 숫자, 문자열, 리스트, 튜플 등 어떤 자료형이든 상관없이 추가 가능합니다.
두번째, 요소 삽입 및 제거 입니다.
리스트의 원하는 인덱스 위치에 삽입할 경우 사용하는 list.insert(i, x) 함수 입니다. i는 인덱스 위치, x는 삽입할 입력값입니다.
리스트에서 첫 번째로 나타는 'N'값을 제거 하고 싶을 때 사용하는 list.remove(x)입니다. x는 제거하고 싶은 'N'값을 입력하시면 됩니다.
입력된 인덱스의 요소를 제거하고 반환할 때 사용하는 list.pop(i) 함수 입니다. i는 인덱스 번호이고 i인덱스를 생략하면 가장 마지막 요소를 제거하고 반환합니다.
리스트의 모든 요소를 제거하여 빈 리스트로 만드는 list.clear()리스트 입니다.
.pop함수에 대해 이해하기 쉽게 다른 예제를 하나 더 만들어 두겠습니다.
fruits = ['apple', 'banana', 'cherry'] #과일 리스트 생성
# pop: 원하는 인덱스 꺼내기
fruit1 = fruits.pop(1) # banana 꺼내기
print(fruit1) # banana 출력
print(fruits) # ['apple', 'cherry']반환된 리스트 저장
#반환된 리스트를 따로 저장하지 않으면 삭제
remove, del과의 비교
# remove: 값으로 삭제만 (반환 x)
fruits.remove('cherry')
print(fruits) # ['apple']
# del: 그냥 삭제만
del fruits[0]
print(fruits) # []
세번째,요소 검색 및 정렬 함수입니다.
리스트에서 원하는 값이 가장 처음 나타나는 인덱스를 반환하는 함수인 list.index(x) 이며 x에 반환하고 싶은 인덱스를 입력하시면 됩니다.
x가 없으면 오류가 발생합니다.
리스트에 원하는 인덱스가 몇 개 있는지 횟수를 반환하는 함수인 list.count(x)입니다.
리스트의 요소를 정렬하는 함수인 list.sort(). reverse=True 옵션을 사용하면 내림차순으로 정렬할 수 있습니다.
list.reverse() 리스트의 요소 순서를 역순으로 뒤집습니다.
위 예제를 참고하여 주시면 되겠습니다.
이로써 리스트 자료형(자료구조)에 대해 배워보았습니다.
고생많으셨습니다~ 😊
📘 참고:
《Do it! 점프 투 파이썬 (전면 개정 2판)》, 박응용 저, 이지스퍼블리싱, 2023
※ 본 글은 위 교재의 내용을 학습 및 정리 목적으로 요약/재구성한 글입니다.
'Python(파이썬)_점프 투 파이썬 > 파이썬 기초 문법' 카테고리의 다른 글
딕셔너리 자료형 (3) | 2025.08.09 |
---|---|
튜플 자료형 (4) | 2025.08.07 |
파이썬 문자열 자료형(문자열 활용) (6) | 2025.08.06 |
파이썬 문자열 자료형(따옴표 및 이스케이프 활용) (2) | 2025.07.27 |
파이썬의 문자열 자료형(정의, 특징) (2) | 2025.07.25 |