초보자를 위한 Step-by-Step: 리스트와 인덱싱으로 값을 추가/삭제해 Python 기초 잡기
생각보다 많은 사람들이 파이썬의 리스트를 처음 만날 때 머뭔하게 멈추곤 해요. 원소를 어떻게 찾고, 어떻게 바꾸고, 또 어떻게 추가하면 될지 막막한 거죠. 저도 처음엔 인덱스 번호가 뜨거운 용어처럼 느껴졌고, 한두 번의 실패 끝에 비로소 눈에 보이는 규칙을 찾았어요. 혹시 이런 고민 해보신 적 있으신가요?
이 글은 바로 그런 불안감을 덜어주기 위해 시작했습니다. 리스트의 기본인 인덱싱과 슬라이싱, 그리고 값의 추가/삭제를 처음 시작하는 분들이 실전에 바로 적용할 수 있도록 5단계 튜토리얼로 정리했어요. 제 경험상, 하나의 직관적인 습관만 들여도 파이썬의 리스트 다루기가 훨씬 수월해집니다. 글을 따라가다 보면 자연스럽게 문제 해결 능력도 함께 커집니다.
파이썬에서 리스트는 데이터 관리의 기본 도구예요. 간단한 숫자 목록부터 문자열, 심지어 다른 리스트까지 담을 수 있죠. 이 편에서 다루는 건 아주 기초적인 수준이지만, 이 기초를 탄탄하게 다져두면 이후에 파이썬을 배우며 마주하는 거의 모든 데이터 처리 과제에 도움이 됩니다. 최근 교육 현장에서도 리스트 다루기 능력은 프로그래밍의 "손목 힘" 같은 역할을 한다고들 해요. 리스트를 제대로 이해하면 함수형 프로그래밍이나 데이터 분석 라이브러리의 문도 더 쉽게 열리죠.
이 글은 초보자가 흔히 놓치는 포인트를 짚어주고, 바로 적용 가능한 예제와 팁으로 구성했습니다. 또한 각 단계마다 실전 문제 해결 팁을 포함해, 읽고 끝나자마자 바로 코딩에 옮길 수 있도록 도와드립니다. 당신이 지금 리스트로 머뭇거린다면, 이 글을 따라가 보세요. 차근차근 해내다 보면 어느 순간 파이썬의 기본이 내 안에 자리 잡고 있을 거예요.
이 글에서 다룰 내용
- 문제 제시 — 파이썬의 리스트 기본 격자 이해
- 단계별 실습 — 인덱싱과 슬라이싱의 기초
- 값 추가/삭제의 실전 기술
- 실전 문제로 복습하기
- 마무리 팁 및 자주 묻는 질문
리스트의 기본 격자 이해
리스트는 파이썬에서 가장 먼저 배우는 자료구조 중 하나예요. 한 줄의 코딩으로 여러 데이터를 담고 다룰 수 있죠. 인덱스는 배열의 각 원소에 붙은 번호처럼 작동하고, 이를 이용해 특정 위치의 값을 조회할 수 있습니다. 슬라이싱은 리스트의 일부를 잘라 새로운 리스트를 만들어 주죠. 이 기본 동작을 이해하는 건 이후에 나오는 모든 리스트 조작의 출발점이 됩니다.
예를 들어 친구 목록이 담긴 리스트가 있다면, 0번째 친구의 이름을 꺼내고, 1~3번째 친구들을 모아 새로운 부분 리스트를 만들 수 있습니다. 이렇게 간단한 원리만 이해해도, 이후에 배열을 다루는 다양한 상황에서 훨씬 빠르게 응용할 수 있습니다.
단계별 실습 — 인덱싱과 슬라이싱의 기초
단일 인덱스로 값 조회하기
먼저 리스트에서 특정 위치의 값을 조회하는 법을 살펴볼게요. 양손을 다 쓰듯이, 인덱스는 파이썬이 원소를 찾아주는 좌표표 같은 역할을 합니다. 예를 들어 숫자들이 담긴 리스트가 있고, 0번 인덱스에는 첫 번째 원소가 들어 있어요. 이때 my_list[0]처럼 인덱스를 적으면 바로 그 위치의 값을 얻을 수 있습니다.
실제로는 이렇게 간단합니다. 다만 주의할 점은 인덱스 범위를 넘어서 조회하면 IndexError가 발생한다는 것인데, 이 부분을 나중에 더 자세히 다루겠습니다. 우선은 작은 예제로 연습해 보죠.
예제: numbers = [10, 20, 30, 40, 50]에서 numbers[2]의 값을 출력하면 30이 나옵니다.
슬라이싱으로 부분 리스트 만들기
슬라이싱은 리스트의 연속된 일부를 새로운 리스트로 잘라내는 연산입니다. 구문은 아주 직관적이에요. 리스트[시작인덱스:종료인덱스]에서 시작인덱스는 포함되고 종료인덱스는 포함되지 않습니다. 예를 들어 1부터 3번째 원소까지라면 numbers[1:4]처럼 적으면 됩니다. 중요한 점은 시작 인덱스를 생략하면 0으로 간주되고, 종료 인덱스를 생략하면 리스트의 끝까지 잘려진다는 겁니다.
예제: items = ['a', 'b', 'c', 'd', 'e']에서 items[:3]은 ['a', 'b', 'c']를 반환합니다. 반대로 items[2:]는 ['c', 'd', 'e']를 반환하죠.
값 추가/삭제의 실전 기술
append(), insert()로 값 추가하기
리스트는 원소를 쉽고 빠르게 늘릴 수 있어요. 가장 많이 쓰는 두 가지 방식이 append()와 insert()인데요, append는 리스트의 마지막에 하나의 원소를 추가하고, insert는 특정 위치에 하나의 원소를 추가합니다. 두 메서드 모두 원래 리스트를 수정하는 in-place 방식이라 새로운 리스트를 만들 필요가 없죠.
- append(x): 리스트의 맨 끝에 x를 추가합니다. 예) numbers.append(60) → [10, 20, 30, 40, 50, 60]
- insert(i, x): 인덱스 i 위치에 x를 삽입합니다. 예) numbers.insert(2, 25) → [10, 20, 25, 30, 40, 50]
remove(), pop()으로 값 제거하기
리스트의 원소를 제거하는 방법도 두 가지가 있어요. remove은 특정 값을 찾아 삭제하고, pop은 인덱스에 해당하는 원소를 제거합니다. pop은 인덱스를 지정하지 않으면 마지막 원소를 제거합니다. 이게 왜 중요하냐면, 데이터의 위치가 중요한 상황에서 특정 원소를 제거하는 일이 자주 생기기 때문이죠.
- remove(x): 리스트에서 처음으로 등장하는 값 x를 제거합니다. 예) nums.remove(30) → 30이 가장 먼저 등장한 위치의 원소 제거
- pop([i]): 인덱스 i의 원소를 제거하고 그 값을 반환합니다. 인덱스를 생략하면 마지막 원소를 제거합니다. 예) nums.pop() → 마지막 원소 제거 및 반환
실전 팁: 원소의 중복 여부가 중요한 상황이라면 remove()를 호출하기 전에 원소가 존재하는지 확인하길 권합니다. 예를 들어 값을 여러 번 제거해야 한다면 while x in nums: nums.remove(x)처럼 루프를 돌려 안전하게 처리하는 게 좋습니다.
실전 문제로 복습하기
문제 1: 리스트의 특정 원소 교체하기
아래 리스트에서 두 번째 원소를 교체해 보세요. 조건은 간단합니다. 원래 값보다 큰 값으로 바꿔도 되고, 같은 값으로 바꿔도 되고, 새로운 값을 직접 입력해도 됩니다.
예시 코드:
lst = [5, 9, 14, 20]
lst[1] = 12
print(lst) # 결과: [5, 12, 14, 20]
문제 2: 조건에 맞는 부분 리스트 추출하기
숫자들로 이루어진 리스트가 주어졌을 때, 값이 10 이상인 원소들로만 이루어진 새로운 리스트를 만들어 보세요. 슬라이싱은 조건부 선택과 직결되진 않지만, 전체 흐름에서 인덱싱과 슬라이싱의 조합으로 문제를 더 쉽게 해결하는 방법을 찾게 될 거예요.
예시 코드:
lst = [3, 11, 7, 15, 2]
filtered = [x for x in lst if x >= 10]
print(filtered) # 결과: [11, 15]
지금까지 다룬 내용을 한 문장으로 요약하자면, 인덱스와 슬라이싱으로 리스트의 값을 바라보고, append/insert로 값을 더하고, remove/pop으로 값을 제거하는 기본 기술을 실전 문제로 체득하는 과정이었습니다.
- 인덱싱의 능력: 특정 위치의 값을 정확히 꺼내는 능력이 생깁니다.
- 슬라이싱의 관용: 부분 리스트를 만들어 더 큰 데이터 흐름에 연결합니다.
- 추가의 쉽게 하기: append와 insert로 필요한 형태를 만듭니다.
- 삭제의 안전성: remove와 pop으로 불필요한 값을 제거하고 인덱스 관리도 연습합니다.
여기까지 읽으셨다면 이제 여러분도 리스트의 기본 다루기에서 큰 그림을 잡으실 수 있을 거예요. 남은 건 실제로 코드에 적용해 보는 일뿐이죠. 도전해 보세요. 실패해도 괜찮습니다. 그 실패를 통해 더 나은 방법을 찾으면 됩니다.
자주 묻는 질문
리스트를 깊게 이해하려면 어떻게 공부하는 게 좋을까요?
기본 문법을 반복해서 익힌 뒤, 작은 문제를 직접 만들어 해결하는 방식이 좋아요. 예를 들어 숫자 목록에서 홀수만 추출하기, 특정 조건으로 정렬하기처럼 간단한 과제부터 시작해 보세요. 그리고 각 단계마다 왜 그렇게 동작하는지 코드에 주석으로 남겨 놓으면 이해가 더 빨라집니다.
인덱스 범위 주의점은 어떤 게 있나요?
파이썬의 인덱스는 0부터 시작합니다. 음수 인덱스도 가능하지만, 범위를 벗어나면 IndexError가 발생합니다. 슬라이싱은 종료 지점이 리스트의 길이를 넘겨도 문제없이 작동하지만, 결과는 항상 새로운 리스트가 됩니다. 그래서 원본 리스트를 손대지 않으려면 슬라이싱의 결과를 새로운 변수에 저장하는 습관이 중요합니다.
슬라이싱과 원본 리스트의 관계
기본적으로 슬라이싱은 새로운 리스트를 만듭니다. 다만 파이썬의 일부 컨텍스트에서 슬라이싱 결과를 원본에 할당하면 두 변수는 같은 객체를 가리키게 되기도 해요. 이럴 때는 원본을 바꾸면 슬라이싱 결과도 함께 바뀌는 현상을 보일 수 있습니다. 그래서 안전하게는 슬라이싱 결과를 새로운 변수에 저장하고, 원본에 영향을 주고 싶지 않을 때는 이 방식을 사용합니다.
이 글을 끝까지 읽어주셔서 정말 감사합니다. 여러분의 도전이 곧 성장이고, 작은 성공이 모여 큰 자신감으로 돌아올 거예요.
지금부터 바로 코드를 열어 하나씩 따라 해 보세요. 모르는 부분이 생기면 천천히 돌아보되, 포기하지 않는 것이 가장 큰 배움입니다.
다음 글에서 더 깊은 주제, 예를 들어 리스트를 다루는 다양한 상황이나 데이터 분석에 활용하는 방법으로 돌아올게요. 궁금한 점이 있다면 댓글로 남겨 주세요. 함께 성장해 봅시다.
댓글
댓글 쓰기