오늘은 2차원 리스트 행과 열 바꾸기를 쉽게 처리해주는 zip
함수를 알아보자❗️
알고리즘 문제를 풀 때 가끔 2차원 리스트 행과 열을 바꿔야 하는 경우가 있다.
물~론! zip
말고 numpy
의 transpose
메소드를 사용하면 한방에 쉽게 되지만
오늘은 파이썬만을 위한^^ zip
함수를 설명하겠다😊
mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = [[], [], []]
for i in range(len(mylist)):
for j in range(len(mylist[i])):
new_list[i].append(mylist[j][i])
이와 같이, 2중 for문을 통해 리스트의 행과 열을 뒤집는다.
물론 이렇게 해도 그렇게 막 불편하진 않겠지만ㅎㅎ
mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = list(map(list, zip(*mylist)))
이처럼 파이썬의 zip
과 unpacking
을 사용하여 코드 단 한줄으로 리스트를 뒤집을 수 있다!
💡 zip
zip
(*iterables)는 각 iterables 의 요소들을 모으는 이터레이터를 만든다.
이는 튜플의 이터레이터를 돌려주는데, i번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의 i번째 요소를 포함한다.
mylist = [1, 2, 3]
new_list = [40, 50, 60]
for i in zip(mylist, new_list):
print (i)
(1, 40)
(2, 50)
(3, 60)
➡️ 사용 예 1) 여러 개의 Iterable 동시에 순회
list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
for number1, number2, number3 in zip(list1, list2, list3):
print(number1 + number2 + number3)
➡️ 사용 예 2) Key 리스트와 Value 리스트로 딕셔너리 생성
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}
➡️ 파이썬의 zip
함수와 dict 생성자를 이용하면 코드 단 한줄로, 두 리스트를 합쳐 딕셔너리로 만들 수 있다!
📌 참고자료