반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- list
- SpringBoot
- Java
- 자바문법
- 스프링부트
- 인텔리제이
- Eclipse
- IntelliJ
- math
- 문자열
- 테스트자동화
- HashMap
- html
- 자바스크립트
- Visual Studio Code
- javascript
- CSS
- ArrayList
- java테스트
- 배열
- Array
- 자바
- junit5
- string
- vscode
- 단위테스트
- 정규식
- js
- input
- junit
Archives
- Today
- Total
어제 오늘 내일
[Python 기초] "표 형태의 데이터도 한 줄로!" 2차원 리스트 컴프리헨션 본문
2차원 리스트를 만들 때 가장 흔하게 저지르는 실수가 바로 리스트 곱하기(*)를 사용하는 것입니다. 하지만 앞서 배웠듯이 이는 참조 복사 버그를 일으키죠. 리스트 컴프리헨션을 사용하면 각 행이 독립적으로 존재하는 완벽한 2차원 배열을 단 한 줄로 안전하게 만들 수 있습니다.
1. 기본 구조: 중첩 리스트 생성하기
2차원 리스트는 '리스트 안에 리스트가 들어있는 구조'입니다. 따라서 컴프리헨션 안에 또 다른 컴프리헨션을 넣어주면 됩니다.
📌 예제 코드: 3x4 크기의 0으로 채워진 행렬 만들기
rows = 3
cols = 4
# [ [안쪽 리스트] for 바깥쪽 반복문 ]
# "0을 4번 채운 리스트를 3번 만들어라!"
matrix = [[0 for _ in range(cols)] for _ in range(rows)]
print(matrix)
# 출력: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
2. 값에 규칙 부여하기
인덱스 번호를 활용하여 2차원 배열 안에 특정한 값을 채울 수도 있습니다.
📌 예제 코드: 구구단 2단부터 3단까지 리스트로 만들기
# [[결과값 for i 인덱스] for j 인덱스]
gugudan = [[j * i for i in range(1, 10)] for j in range(2, 4)]
print("2단:", gugudan[0])
print("3단:", gugudan[1])
3. 고수들의 기술: 2차원 리스트 '평탄화' (Flatten)
반대로 2차원 리스트를 다시 1차원 리스트로 쭉 펴야 할 때가 있습니다. 이때도 리스트 컴프리헨션을 쓰면 for문을 두 번 겹쳐 쓰는 것보다 훨씬 간결합니다.
📌 예제 코드: 2차원 -> 1차원 변환
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# "행(row)에서 값(val)을 꺼내는데, 그 행은 matrix에서 하나씩 가져와라"
# 주의: 바깥쪽 for문이 앞에 옵니다!
flatten = [val for row in matrix for val in row]
print(flatten)
# 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9]
4. 조건문이 포함된 2차원 컴프리헨션
특정 조건에 맞는 데이터만 골라내어 2차원 리스트를 정제할 수도 있습니다.
📌 예제 코드: 2차원 리스트에서 짝수만 남기기
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 각 행에서 짝수만 골라내어 새로운 2차원 리스트 생성
evens_only = [[x for x in row if x % 2 == 0] for row in data]
print(evens_only)
# 출력: [[2], [4, 6], [8]]
📝 핵심 요약
- 독립성: 리스트 컴프리헨션으로 만든 2차원 리스트는 각 행이 독립적이라서 한 곳을 수정해도 다른 곳에 영향을 주지 않습니다.
- 순서: 평탄화(Flatten) 시에는 바깥쪽 반복문을 먼저 쓰고 안쪽 반복문을 뒤에 씁니다. (
[val for row in matrix for val in row]) - 가독성: 2차원 이상의 깊이(3차원 등)로 들어가면 코드가 너무 복잡해질 수 있으니, 그때는 일반적인
for문을 쓰는 것이 나을 수도 있습니다.
2차원 리스트 컴프리헨션까지 정복하셨군요! 이제 데이터를 구조적으로 생성하고 가공하는 데 거침이 없으실 겁니다.
반응형
'IT > Python' 카테고리의 다른 글
| [Python 실전] "좌표를 찍어라!" 2차원 리스트 데이터 위치 찾기 (0) | 2026.05.25 |
|---|---|
| [Python 기초] "가로를 세로로!" 2차원 리스트 전치(Transpose) 완벽 가이드 (0) | 2026.05.24 |
| [Python 기초] "세 줄 코드를 한 줄로!" 리스트 컴프리헨션 완벽 이해 (0) | 2026.05.24 |
| [Python 기초] "따로 노는 리스트를 하나로 묶자!" zip() 함수 활용법 (0) | 2026.05.24 |
| [Python 기초] "누가 빠졌지?" 리스트 차집합 찾기 및 데이터 대조 (0) | 2026.05.22 |
Comments
