
파이썬에서 리스트(list) 는 “여러 값을 순서대로 모아서, 마음대로 꺼내고 바꿀 수 있는 상자” 같은 존재다.
이번 글에서는 단순히 [] 문법만 보는 게 아니라,
이터러블 / 컬렉션 / 시퀀스 개념
리스트의 인덱싱 & 슬라이싱
리스트 연산 (+, *, in, not in, del)
리스트에서 자주 쓰는 메서드들
까지 한 번에 정리한다.
0. 용어정리: 이터러블, 컬렉션, 시퀀스
반복(iteration)이 가능한 객체의 총칭
for 루프에서 순회할 수 있는 모든 것.
예) list, tuple, set, dict, str, range, 제너레이터 등

여러 개의 데이터를 하나의 변수에 묶어서 저장할 수 있는 자료형
"데이터 묶음(container)" 역할을 하는 타입
컬렉션 공통 기능
in, not in: 포함 여부 검사
for: 요소 하나씩 순회
len(): 길이(요소 개수) 확인


순서가 있는 데이터 묶음, 핵심은 인덱스(index = 위치 번호)가 있다는 것.
시퀀스 특징
순서 존재: 0, 1, 2,... 인덱스로 접근 가능
인덱싱: 특정 위치의 값 가져오기
슬라이싱: 일부 구간 잘라서 새 시퀀스 만들기
반복 가능: for로 순차 순회
시퀀스에 속하는 주요 타입:
list, tuple : 컬렉션 이면서 시퀀스
set, dict: 컬렉션 이지만 "시퀀스"는 아님 (순서 개념이 다름)

1. 리스트(
list) 기본
여러 값을 순서대로 저장할 수 있는 자료형
인덱스로 각 항목에 접근할 수 있고, 추가·삭제·수정이 자유로운 가변 객체
주요 특징
순서 유지: 넣은 순서 그대로 저장
중복 허용: 같은 값 여러 개 가능
다양한 자료형 저장 가능: 정수, 실수, 문자열, 리스트까지 모두 가능
가변(mutable): 안에 들어있는 값을 바꿀 수 있음
[]로 표현됨, 각 요소는 쉼표,로 구분, 다양한 자료형 저장 가능
list(), 이터러블을 리스트로 변환할 때 사용
인덱싱: O(1)
append: 평균 O(1)
insert(0, x): O(n)
remove(x): O(n)
리스트는 가변 시퀀스로서 다양한 연산을 지원하지만, 어떤 연산은 리스트 길이에 따라 시간이 더 걸릴 수 있다.
2. 인덱싱 & 슬라이싱
시퀀스에서 "특정 위치의 값"을 가져오는 것.
인덱스는 0 부터 시작
음수 인덱스: 뒤에서부터 접근(-1 = 마지막)

str)은 불변(immutable)이라서 값을 바꿀 수 없다.

시퀀스에서 특정 구간을 잘라서 새로운 시퀀스를 만드는 방법
원본은 변경되지 않으며, 새로운 시퀀스를 생성함
start: 시작 인덱스(포함)
end: 끝 인덱스(불포함)
step: 간격(양수 / 음수 가능)


▶ 슬라이싱에서 start, end, step이 어떻게 적용되는지 시각화한 예(1)

▶ 슬라이싱에서 start, end, step이 어떻게 적용되는지 시각화한 예(2)
💡 슬라이싱은 항상 새 리스트(복사본)을 만든다.
큰 리스트를 반복적으로 슬라이싱하면 메모리 사용량이 늘어날 수 있다.
문자열도 시퀀스 이므로 완전히 동일하게 슬라이싱 가능
start를 생략: 첫 번째 요소부터 슬라이싱
end를 생략: 마지막 요소까지 슬라이싱
start, end 모두 생략: 전체 복사
step에 -1을 사용해서 전체복사: 리스트를 반전해서 복사



▶ 슬라이싱 범위에 새로운 값을 할당해 리스트 구조가 변경되는 예시 (문자열과의 차이점)
실습1. 인덱싱, 슬라이싱

첫 번째 요소: 10
마지막 번째 요소: 50

가운데 요소: [300, 400, 500]

모든 원소의 두배: [2, 4, 6, 8, 10]

리스트의 역순: ['e', 'd', 'c', 'b', 'a']

짝수 인덱스: ['zero', 'two', 'four']

영화 리스트 수정: ['인셉션', '인터스텔라', '매트릭스', '타이타닉', '기생충']

새 리스트: ['물리', '생물', '지구과학']
다음 리스트를 [1 ~ 3번째 요소] + [4 ~ 6번째 요소] + [7 ~ 9번째 요소] 순서로 세 구간을 나눈 뒤,
각 구간을 역순으로 따로 출력하세요. 단, 출력 시 한 줄로 출력되게 출력해주세요.

['C', 'B', 'A'] ['F', 'E', 'D'] ['I', 'H', 'G']
3. 리스트 연산
del - 리스트 요소 삭제del 은 파이썬의 내장 키워드로, 객체를 삭제(delete) 하는데 사용됨.
del은 범용 삭제 키워드: 리스트의 요소뿐 아니라 슬라이스 범위 삭제, 변수 자체, 딕셔너리의 키, 객체 속성 등도 삭제할 수 있음




+)+ 연산자로 두 리스트를 이어 붙여 하나의 새로운 리스트를 생성
원본 리스트는 변경되지 않고, 새로운 리스트 객체가 만들어짐


*)* 연산자로 리스트를 지정한 횟수 만큼 반복하여 새로운 리스트를 생성
원본 리스트는 변경되지 않고, 새로운 리스트 객체가 만들어짐
반복된 리스트의 요소들은 원래 순서를 유지함

반복하는 배열의 요소들의 순서는 변함 X
연산결과 ⇒ 새로운 리스트 반환

in, not in)
+ / *는 항상 새 리스트 생성
del, 슬라이스 삭제는 항상 원본을 직접 수정
in / not in 은 True / False 반환
실습2. 리스트 연산
다음 리스트에서 가운데 3개 요소 ["Banana", "Cherry", "Grape"] 를 삭제한 뒤
나머지 앞 / 뒤 리스트를 연결하여 새 리스트 result를 출력하세요.
fruits = ["Apple", "Banana", "Cherry", "Grape", "Watermelon", "Strawberry"]

['Apple', 'Watermelon', 'Strawberry']
다음 리스트를 3번 반복한 후, 전체 결과에서 중간에 있는 "A"만 삭제하세요
최종 리스트 출력
letters = ["A", "B"]

['A', 'B', 'B', 'A', 'B']
4. 주요 메서드
len(): 길이(요소 개수) 반환시퀀스나 컬렉션 자료형의 요소 개수를 반환
문자열, 튜플, 셋, 딕셔너리에도 사용 가능

append(x): 리스트 끝에 요소 추가한 개의 요소를 리스트 맨 뒤에 붙인다.
리스트 자체가 바뀐다. (원본 수정)

extend(iterable): 리스트 끝에 여러 요소 추가전달된 이터러블의 모든 요소를 풀어서 뒤에 붙임
역시 원본 수정

insert(index, x): 원하는 위치에 요소 삽입index 위치에 새 값을 끼워 넣는다
이후 요소들은 한 칸씩 뒤로 밀림

remove(x): 특정 값을 찾아 삭제가장 처음 발견된 해당 값(x)를 삭제함
값이 없으면 ValueError 발생

pop(index): 인덱스 요소를 꺼내고 삭제인덱스를 지정하면 해당하는 인덱스의 요소를 삭제하고 반환함
인덱스를 지정하지 않으면 마지막 요소를 삭제하고 반환함

sort(), sorted(): 리스트 정렬= list.sort(): 원본을 변경,
sorted(list): 정렬된 새로운 리스트 반환, 원본 유지
오름차순이 기본이며, reverse = True 옵션을 주면 내림차 순으로 정렬 됨

▶ sort()는 원본 변경, sorted()는 새로운 리스트 생성
reverse(): 리스트 요소를 뒤집기리스트 자체를 뒤집는 원본 수정 메서드
number[::-1]는 새 리스트를 돌려준다는 점과 차이 기억!

count(x): 값의 개수 세기
max(), min(): 최대 / 최소값 찾기
sum(): 요소들의 합 구하기

실습3. 리스트 주요 메서드
기차에 승객들이 순서대로 탑승하고 있습니다.
처음엔 ["철수", "영희"]가 탑승했습니다.
그 다음 역에서 ["민수", "지훈"]이 함께 탑승했습니다.
다음 역에서 "영희"는 내렸습니다.
"수진"이 1번 자리에 탑승했습니다.
마지막 역에서 "민수"가 내렸고, 기차 안의 순서를 뒤집었습니다.
현재 기차 안에는 어떤 승객들이 어떤 순서로 앉아있을까요?

마지막 탑승 순서: ['지훈', '철수', '수진']
숫자 카드 게임에서 다음 리스트가 주어졌습니다. [5, 3, 7]
2장을 더 추가해서 [4, 9]가 들어옵니다.
가장 큰 수와 가장 작은 수를 각각 구해 출력하세요.
총합을 출력하세요.
리스트를 정렬한 다음, 마지막 숫자를 제거하세요.
최종 리스트를 출력하세요.

리스트 추가 후: [5, 3, 7, 4, 9]
가장 큰 수: 9 / 가장 작은 수: 3
총 합계: 28
리스트를 정렬: [3, 4, 5, 7, 9]
마지막 숫자 제거: 9
최종 리스트: [3, 4, 5, 7]
문자열은 불변이라 text[0] = 'a' 불가
list * 3 은 리스트 내부 요소를 '복사'한 새로운 리스트
remove(x)는 x가 없으면 ValueError 발생
sort()는 원본을 정렬하고 반환값이 None 이라는 점 주의
pop()은 삭제 + 반환 / remove()는 삭제만 한다.
5. 마무리 정리
이번 글에서 정리한 내용:
리스트를 시퀀스 + 가변 컬렉션으로 이해하면 인덱싱 / 슬라이싱 + 메서드 사용이 한 번에 정리된다.
“원본을 바꾸는 애 vs 새 리스트를 만드는 애” 꼭 구분해 두기.
리스트는 값을 자유롭게 변경할 수 있는 가변(mutable) 자료형이다.
반면, 다음 글에서 다룰 튜플(tuple) 은 불변(immutable) 자료형이기 때문에 값을 수정할 수 없다는 차이가 있다.
6. 아웃트로
이번 글에서는 파이썬에서 가장 많이 쓰이는 컬렉션인 리스트(list) 를
“자료형 개념 → 인덱싱·슬라이싱 → 연산 → 메서드 → 실습” 순으로 정리해 봤다.
다음 글에서는 리스트와 함께 자주 쓰이는 튜플(tuple), 집합(set), 딕셔너리(dict) 를 이어서 정리할 예정.