본문 바로가기
IT/Python Basic

[Python] 초급 개념18 - enumerate와 zip 활용

by Echinacea 2025. 2. 19.
반응형

파이썬에서는 enumerate()와 zip() 함수를 활용하여 반복문을 보다 효율적으로 작성할 수 있습니다. enumerate()는 리스트나 튜플과 같은 순회 가능한(iterable) 객체의 인덱스와 값을 동시에 반환하며, zip()은 여러 개의 iterable을 병렬로 묶어 처리할 때 사용됩니다.


 

 

🔹 1. enumerate() 함수란?

enumerate() 함수는 반복문에서 현재 항목의 인덱스를 함께 가져올 때 유용합니다.

 

✅ 예제 1: 리스트에서 인덱스와 값을 함께 출력

fruits = ["사과", "바나나", "체리"]

for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

출력 예시:

0: 사과
1: 바나나
2: 체리

 

📌 설명:

  • enumerate(fruits)는 각 요소의 **인덱스(index)**와 값을 튜플 형태로 반환합니다.
  • for index, fruit in enumerate(fruits):에서 index와 fruit을 각각 변수에 저장하여 사용합니다.

 

 

🔹 2. enumerate()의 start 인자

기본적으로 enumerate()는 인덱스를 0부터 시작하지만, start 인자를 활용하면 원하는 숫자부터 시작할 수 있습니다.

 

✅ 예제 2: start 값 변경하기

colors = ["빨강", "초록", "파랑"]

for index, color in enumerate(colors, start=1):
    print(f"{index}번째 색상: {color}")

출력 예시:

1번째 색상: 빨강
2번째 색상: 초록
3번째 색상: 파랑

 

📌 설명:

  • enumerate(colors, start=1)로 설정하면 인덱스가 1부터 시작합니다.
  • 순서가 중요한 경우 유용하게 활용할 수 있습니다.

 

 

🔹 3. zip() 함수란?

zip() 함수는 여러 개의 리스트(또는 iterable)를 묶어서 하나의 튜플로 반환합니다. 여러 개의 리스트를 동시에 순회할 때 사용하면 매우 유용합니다.

 

✅ 예제 3: 두 개의 리스트 병렬 순회

names = ["철수", "영희", "민수"]
ages = [25, 24, 23]

for name, age in zip(names, ages):
    print(f"{name}의 나이는 {age}살입니다.")

출력 예시:

철수의 나이는 25살입니다.
영희의 나이는 24살입니다.
민수의 나이는 23살입니다.

 

📌 설명:

  • zip(names, ages)는 ("철수", 25), ("영희", 24), ("민수", 23)의 형태로 데이터를 묶어 반환합니다.
  • for name, age in zip(names, ages):에서 각각의 값을 추출하여 출력합니다.

 

 

🔹 4. zip()을 활용한 여러 개의 리스트 순회

zip()을 활용하면 두 개 이상의 리스트를 동시에 다룰 수 있습니다.

 

✅ 예제 4: 세 개의 리스트 묶기

students = ["Alice", "Bob", "Charlie"]
scores = [90, 85, 88]
grades = ["A", "B", "B+"]

for student, score, grade in zip(students, scores, grades):
    print(f"{student}의 점수는 {score}점이며, 등급은 {grade}입니다.")

출력 예시:

Alice의 점수는 90점이며, 등급은 A입니다.
Bob의 점수는 85점이며, 등급은 B입니다.
Charlie의 점수는 88점이며, 등급은 B+입니다.

 

📌 설명:

  • zip(students, scores, grades)를 사용하여 세 개의 리스트를 한 번에 순회할 수 있습니다.
  • 이처럼 zip()은 여러 개의 데이터셋을 병렬로 처리할 때 매우 유용합니다.

 

 

🔹 5. zip()과 enumerate() 함께 사용하기

두 함수를 조합하면 인덱스, 값1, 값2 등을 동시에 다룰 수 있습니다.

 

✅ 예제 5: enumerate()와 zip() 함께 활용하기

products = ["노트북", "스마트폰", "태블릿"]
prices = [1500000, 1000000, 600000]

for index, (product, price) in enumerate(zip(products, prices), start=1):
    print(f"{index}. {product}의 가격은 {price}원입니다.")

출력 예시:

1. 노트북의 가격은 1500000원입니다.
2. 스마트폰의 가격은 1000000원입니다.
3. 태블릿의 가격은 600000원입니다.

 

📌 설명:

  • zip(products, prices)를 통해 제품과 가격을 묶습니다.
  • enumerate(zip(products, prices), start=1)을 사용하여 리스트의 인덱스와 함께 출력합니다.

 

 

🔹 6. zip()과 unzip (해제)

zip()을 사용하여 묶은 데이터를 다시 분리할 수도 있습니다.

 

✅ 예제 6: zip(*)을 활용한 언패킹

pairs = [("A", 1), ("B", 2), ("C", 3)]
letters, numbers = zip(*pairs)

print(letters)
print(numbers)

출력 예시:

('A', 'B', 'C')
(1, 2, 3)

 

📌 설명:

  • zip(*pairs)을 사용하면 리스트 안의 튜플을 개별 리스트로 분리할 수 있습니다.

 

반응형

댓글