enumerate로 인덱스와 값을 함께 가져오기
기본 for
문을 사용할 때 리스트의 인덱스와 값을 동시에 다뤄야 할 때가 많습니다.
이럴 때 enumerate()
함수를 사용하면 훨씬 깔끔하게 코드를 작성할 수 있습니다.
기본 for문 방식
fruits = ["사과", "바나나", "포도"]
for i in range(len(fruits)):
print(i, fruits[i])
enumerate 사용 방식
for i, fruit in enumerate(fruits):
print(i, fruit)
해석:
enumerate()
는 각 요소의 인덱스와 값을 튜플로 반환합니다.- 코드를 더 간결하고 가독성 높게 만들 수 있습니다.
시작 인덱스 조정하기
for i, fruit in enumerate(fruits, start=1):
print(f"{i}번째 과일은 {fruit}")
enumerate()
에 start=1
을 주면 인덱스가 1부터 시작합니다.
리스트를 사람이 읽기 쉬운 순서로 출력할 때 유용합니다.
zip을 활용한 병렬 반복 처리
zip()
함수는 여러 리스트를 동시에 묶어 반복할 때 사용합니다.
값들을 한 쌍씩 매칭시켜주는 병렬 처리 반복에 아주 유용한 도구입니다.
두 리스트 병렬 순회
names = ["지민", "정국", "뷔"]
scores = [95, 88, 90]
for name, score in zip(names, scores):
print(f"{name}의 점수는 {score}점입니다.")
해석:
zip(names, scores)
는 ('지민', 95), ('정국', 88)... 형태로 묶어줍니다.- 각 튜플의 항목을 동시에 반복할 수 있어, 딕셔너리 생성, 표 출력 등에 자주 활용됩니다.
zip으로 딕셔너리 만들기
score_dict = dict(zip(names, scores))
print(score_dict)
zip()
으로 묶은 데이터를 dict()
로 감싸면 손쉽게 딕셔너리로 변환할 수 있습니다.
이 방식은 실무에서 JSON, 엑셀 데이터 등을 구조화할 때도 유용합니다.
세 개 이상 리스트도 가능
ages = [28, 27, 28]
for name, score, age in zip(names, scores, ages):
print(f"{name}: 점수={score}, 나이={age}")
여러 개의 리스트를 한 줄에 동시에 다룰 수 있는 zip은 병렬 반복의 대표 도구입니다.
리스트 언패킹과 중첩 반복문
2차원 리스트 반복 처리
matrix = [[1, 2], [3, 4], [5, 6]]
for row in matrix:
for item in row:
print(item, end=" ")
해석:
- 2중 for문을 사용해 2차원 배열을 순회합니다.
end=" "
는 출력 시 줄바꿈 대신 공백을 사용합니다.
리스트 언패킹 활용
pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
for number, letter in pairs:
print(f"{number} → {letter}")
해석:
튜플이나 리스트 안에 여러 값을 가진 경우 한 줄로 변수 나눠받기가 가능합니다.
zip과 함께 자주 사용되며, 코드가 매우 직관적으로 바뀝니다.
중첩 루프 + 조건 필터링
for i in range(1, 4):
for j in range(1, 4):
if i != j:
print(f"{i} vs {j}")
해석:
- 모든 경우의 수를 반복하면서, 조건을 통해 특정 조합만 출력
- 경기 일정, 조합 만들기, 테이블 비교 등에 활용됩니다
파이썬의 enumerate()
, zip()
, 언패킹
, 중첩 루프
는 단순한 반복문을 더 짧고 명확하게 만들어줍니다.
이러한 고급 반복 패턴을 익혀두면, 코드의 가독성과 생산성이 크게 향상됩니다.
반복문이 복잡해질수록, 이러한 내장 함수와 패턴을 적극적으로 활용해보세요.
여러분의 반복문은 더 이상 지저분하지 않고, 효율적이고 우아해질 것입니다!