IT & Programming/python
파이썬 리스트와 인덱스
오스카리
2025. 5. 10. 23:04
파이썬에서 리스트(list) 는 여러 개의 데이터를 순서대로 저장할 수 있는 가장 기본적이고 중요한 자료형입니다.
특히 인덱스를 활용한 데이터 접근은 리스트를 제대로 활용하기 위한 핵심 개념입니다.
1. 리스트란?
- 여러 값을 하나의 변수에 저장할 수 있는 자료형
- 대괄호 [] 사용
- 다양한 자료형을 혼합해서 저장할 수 있음 (숫자, 문자열, 리스트 등)
예시:
fruits = ["사과", "바나나", "포도", "딸기"]
2. 인덱스란?
- 리스트의 각 요소는 **순서(인덱스)**를 가지고 있음
- 인덱스는 0부터 시작
- 음수 인덱스를 사용하면 뒤에서부터 접근
예시:
print(fruits[0]) # "사과"
print(fruits[2]) # "포도"
print(fruits[-1]) # "딸기" (마지막 요소)
3. 인덱스를 활용한 수정, 추가, 삭제
수정
fruits[1] = "오렌지"
print(fruits) # ['사과', '오렌지', '포도', '딸기']
추가 (append())
fruits.append("복숭아")
print(fruits) # ['사과', '오렌지', '포도', '딸기', '복숭아']
삽입 (insert())
fruits.insert(2, "수박")
print(fruits) # ['사과', '오렌지', '수박', '포도', '딸기', '복숭아']
삭제 (del, remove(), pop())
del fruits[3] # 인덱스 기준 삭제
fruits.remove("사과") # 값 기준 삭제
fruits.pop() # 마지막 요소 제거
4. 인덱스를 활용한 반복문 처리
for i in range(len(fruits)):
print(f"{i+1}번째 과일: {fruits[i]}")
또는 enumerate 사용:
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")
5. 슬라이싱(Slicing)
- 인덱스를 활용해 리스트 일부를 잘라서 사용
- 구문: 리스트[start:end:step]
예시:
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4]) # [20, 30, 40]
print(numbers[:3]) # [10, 20, 30]
print(numbers[::2]) # [10, 30, 50]
6. 리스트 인덱스 예외
print(fruits[100])
# IndexError: list index out of range
- 인덱스는 반드시 0 ≤ 인덱스 < len(리스트) 범위 내에서만 사용해야 함
정리
동작 문법 설명
접근 | fruits[0] | 첫 번째 요소 접근 |
수정 | fruits[1] = "배" | 두 번째 요소 수정 |
추가 | fruits.append("귤") | 끝에 추가 |
삭제 | del fruits[2] | 세 번째 요소 삭제 |
슬라이싱 | fruits[1:3] | 일부 요소 추출 |
반복 | for i in range(len()) | 인덱스로 반복 |
리스트와 인덱스는 파이썬에서 가장 자주 쓰이는 기본기 중 하나입니다.
1. 2차원 리스트
개념
- 리스트 안에 또 다른 리스트가 들어있는 구조
- 행(row)과 열(column)의 개념으로 활용 가능
예시:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
인덱스 접근
print(matrix[0]) # [1, 2, 3] (1행)
print(matrix[1][2]) # 6 (2행 3열)
이중 반복문으로 출력
for row in matrix:
for value in row:
print(value, end=' ')
print()
# 1 2 3
# 4 5 6
# 7 8 9
행, 열만 따로 접근하기
first_column = [row[0] for row in matrix] # [1, 4, 7]
2. 리스트 컴프리헨션
개념
- 기존 리스트나 범위를 바탕으로 간결한 문법으로 새 리스트 생성
- 파이썬답고 직관적인 코드 작성 방식
기본 문법
[표현식 for 변수 in 반복가능객체]
예시:
squares = [x**2 for x in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
조건 추가
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers) # [0, 2, 4, 6, 8]
중첩 리스트 컴프리헨션 (2차원 리스트 생성)
matrix = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(matrix)
# [
# [1, 2, 3],
# [2, 4, 6],
# [3, 6, 9]
# ]
정리
유형 예시 설명
2차원 리스트 | matrix[1][2] | 행과 열 인덱스로 데이터 접근 |
단순 컴프리헨션 | [x**2 for x in range(5)] | 제곱 리스트 생성 |
조건 추가 | [x for x in list if x>0] | 필터링 |
중첩 컴프리헨션 | [[i*j for j in ..] for i in ..] | 표 형태 데이터 생성 |
실제 활용 예: 구구단 2단 ~ 4단 출력
table = [[f"{i} x {j} = {i*j}" for j in range(1, 10)] for i in range(2, 5)]
for row in table:
print(" | ".join(row))
출력:
2 x 1 = 2 | 2 x 2 = 4 | ... | 2 x 9 = 18
3 x 1 = 3 | 3 x 2 = 6 | ... | 3 x 9 = 27
4 x 1 = 4 | 4 x 2 = 8 | ... | 4 x 9 = 36
원하신다면 리스트 실습용 연습 문제 또는 리스트를 활용한 미니 프로젝트(성적표, 장바구니 등)도 만들어드릴 수 있습니다. 만들어드릴까요?
반응형