Python 여러개 리스트 값 동시 취득 zip 함수

zip 함수는 여러개 오브젝트나 리스트 등이 요소를 동시에 취득할 수 있습니다.

for 문에서 zip 함수를 사용해 복수의 리스트 요소를 취득하는 방법을 보겠습니다.

for 문에서 사용 방법

리스트 요소수가 다를 경우

 

zip 과 for

for 문과 zip 함수를 사용해 여러 개의 오브젝트나 리스트 등의 요소를 동시에 취득하는 예제입니다.

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)

 

결과

Alice 24
Bob 50
Charlie 18

 

2개의 리스트 안에 값을 동시에 취득했습니다.

for 문에서 2개의 리스트 값을 취득하고 싶은 경우는 for 문에도 변수를 2개 설정해야 합니다.

3개 이상을 사용하고 싶은 경우에는 지정한 리스트만큼 변수도 지정을 해야 합니다.

예를 들어 리스트 3개를 지정했다면 변수도 3개를 지정해야 합니다.

names = ['Alice', 'Bob', 'Charlie']
ages = [24, 50, 18]
points = [100, 85, 90]

for name, age, point in zip(names, ages, points):
    print(name, age, point)

결과

Alice 24 100
Bob 50 85
Charlie 18 90

 

요소수가 다른 경우

zip 함수를 사용해 요소를 취득하는 경우 리스트의 요소수가 다른 경우는 요소수가 적은 수 만큼만 반복문을 실행합니다.

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]

for name, age in zip(names, ages):
    print(name, age)

결과

Alice 24
Bob 50
Charlie 18

 

만약 요소수가 많은 오브젝트나 리스트의 개수만큼 반복문을 실행하고 싶은 경우에는 zip_longest()를 사용합니다.

zip_longest()는 itertools 모듈입니다.

from itertools import zip_longest

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]

for name, age in zip_longest(names, ages):
    print(name, age)

 

결과

Alice 24
Bob 50
Charlie 18
Dave None

 

요소수가 많은 변수 names 리스트의 개수만큼 반복문을 실행했습니다.

변수 ages 리스트에 모자란 값에는 기본값인 None이 설정되었습니다.

None 대신에 다른 값을 설정하고 싶은 경우에는 fillvalue를 설정합니다.

from itertools import zip_longest

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]

for name, age in zip_longest(names, ages, fillvalue=20):
    print(name, age)

 

결과

Alice 24
Bob 50
Charlie 18
Dave 20

 

fillvalue에 기본값을 20으로 지정했습니다.

요소수가 모자란 부분에는 None 대신에 설정한 20이 출력됩니다.

fillvalue를 지정할 때 주의점으로는 일괄로 적용된다는 것입니다.

from itertools import zip_longest

names = ['Alice', 'Bob', 'Charlie', 'Dave']
ages = [24, 50, 18]
points = [100, 85]

for name, age, point in zip_longest(names, ages, points, fillvalue=20):
    print(name, age, point)

 

결과

Alice 24 100
Bob 50 85
Charlie 18 20
Dave 20 20

 

3개 이상의 리스트를 fillvalue를 사용할 때는 주의해야 합니다.

기본값인 None을 출력하도록 하는 경우에는 상관없지만, 각각 다른 기본값을 넣고 싶은 경우에는 fillvalue 대신에 비어있는 요소에 먼저 값을 기본 값을 채워 넣는 처리를 하고 zip 함수를 사용해 값을 취득하도록 해야 합니다.

fillvalue에 값을 여러개 설정하는 방법은 아래를 참조해주세요.

 

여러개 오브젝트나 리스트 등의 요소를 zip 함수와 for 문을 통해 동시에 취득하는 방법을 확인했습니다.

여러 리스트를 동시에 취득하는 것은 자주 사용하기 때문에 알아두면 좋을거 같습니다. 

댓글