반응형
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
- js
- 스프링부트
- CSS
- 테스트자동화
- Array
- 단위테스트
- input
- list
- junit
- IntelliJ
- string
- Visual Studio Code
- 배열
- HashMap
- SpringBoot
- 정규식
- 자바문법
- 자바스크립트
- Eclipse
- 인텔리제이
- 자바
- ArrayList
- javascript
- vscode
- java테스트
- junit5
- 문자열
- math
- Java
- html
Archives
- Today
- Total
어제 오늘 내일
[Python 실전] "좌표를 찍어라!" 2차원 리스트 데이터 위치 찾기 본문
데이터가 바둑판처럼 나열된 2차원 리스트에서 우리가 원하는 값을 찾으려면 "몇 번째 줄(행), 몇 번째 칸(열)"인지 알아내야 합니다. 상황에 맞는 세 가지 해결책을 소개합니다.
1. 가장 정석적인 방법: 중첩 문과
가장 직관적이고 가독성이 좋은 방법입니다. enumerate()를 두 번 중첩해서 사용하면 행 번호와 열 번호를 동시에 얻을 수 있습니다.
📌 예제 코드: 특정 값의 모든 좌표 찾기
grid = [
["A", "B", "C"],
["D", "Target", "F"],
["G", "H", "Target"]
]
target = "Target"
locations = []
# r: 행 번호, row: 해당 행의 리스트
for r, row in enumerate(grid):
# c: 열 번호, val: 실제 값
for c, val in enumerate(row):
if val == target:
locations.append((r, c)) # 좌표를 튜플 형태로 저장
print(f"'{target}'의 위치 목록 (행, 열):", locations)
# 출력: 'Target'의 위치 목록 (행, 열): [(1, 1), (2, 2)]
2. 고수의 한 줄 컷: 리스트 컴프리헨션 활용
위의 복잡한 5줄 코드를 단 한 줄로 줄일 수 있습니다. 코드가 간결해져서 실무에서 위치를 빠르게 뽑아낼 때 자주 쓰입니다.
📌 예제 코드: 리스트 컴프리헨션으로 좌표 추출
grid = [
[10, 20, 30],
[40, 50, 60],
[70, 20, 90]
]
target_value = 20
# (r, c) 좌표를 담는데, r행의 c열 값이 target_value와 같을 때만 담아라!
coords = [(r, c) for r, row in enumerate(grid) for c, val in enumerate(row) if val == target_value]
print(f"값 {target_value}의 위치:", coords)
# 출력: 값 20의 위치: [(0, 1), (2, 1)]
3. 조건에 맞는 첫 번째 위치만 빠르게 찾기
데이터가 아주 방대할 때, 모든 위치를 다 찾을 필요 없이 처음 발견된 곳에서 바로 검색을 중단하고 싶을 때 쓰는 효율적인 방식입니다.
📌 예제 코드: 함수와 제너레이터 활용
grid = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 5라는 숫자의 위치를 찾자마자 종료
target = 5
# next()는 조건에 맞는 첫 번째 결과가 나오면 즉시 반환하고 멈춥니다.
# 만약 없다면 "찾을 수 없음"을 반환합니다.
found = next(((r, c) for r, row in enumerate(grid) for c, val in enumerate(row) if val == target), "찾을 수 없음")
print(f"숫자 {target}의 첫 번째 위치:", found)
# 출력: 숫자 5의 첫 번째 위치: (1, 1)
📝 요약 및 실무 팁
- 모든 위치가 필요할 때: 중첩
enumerate()를 쓴 리스트 컴프리헨션이 가장 깔끔합니다. - 가장 먼저 나오는 하나만 필요할 때:
next()함수를 써서 속도를 높이세요. - 성능 팁: 리스트가 수만 행 이상으로 크다면, 리스트 대신 NumPy 라이브러리의
np.where()함수를 사용하는 것이 훨씬 빠릅니다.
2차원 리스트에서 위치를 찾는 법까지 익히셨으니, 이제 격자 형태의 데이터를 자유자재로 다루실 수 있겠네요!
반응형
'IT > Python' 카테고리의 다른 글
| [Python 기초] "리스트를 하나의 글로!" 파이썬 리스트 문자열 변환 (0) | 2026.05.25 |
|---|---|
| [Python 실전] "가로 세로 싹 다 더해라!" 2차원 리스트 합계와 평균 구하기 (0) | 2026.05.25 |
| [Python 기초] "가로를 세로로!" 2차원 리스트 전치(Transpose) 완벽 가이드 (0) | 2026.05.24 |
| [Python 기초] "표 형태의 데이터도 한 줄로!" 2차원 리스트 컴프리헨션 (0) | 2026.05.24 |
| [Python 기초] "세 줄 코드를 한 줄로!" 리스트 컴프리헨션 완벽 이해 (0) | 2026.05.24 |
Comments
