파이썬을 파이썬답게

zip

  • 2차원 리스트를 뒤집기 위해 다른 언어에서는 2중 for문을 이용해 리스트의 row와 column을 뒤집는다.
mylist = [ [1,2,3], [4,5,6], [7,8,9] ]
new_list = [[],[],[]]

for i in range(3):
    for j in range(3):
        new_list[i].append(mylist[j][i])
  • 파이썬에서는 내장함수 zip과 unpacking 을 사용하면 된다.
  • zip(*iterable)은 동일한 개수로 이루어진 자료형을 묶어준다.
    • *iterable*는 여러 개 입력한 iterable을 전부 모아서 튜플로 만든다.
mylist = [[1,2,3], [4,5,6], [7,8,9]]
new_list = list(map(list, zip(*mylist)))
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
  • zip을 for문에 사용할 수 있다.
mylist = [ 1,2,3 ]
new_list = [ 40, 50, 60 ]

for i in zip(mylist, new_list):
    print(i)
# (1, 40)
# (2, 50)
# (3, 60)
  • 여러 개의 iterable을 동시에 순회할 때 사용할 수 있다.
list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]

for i, j, k in zip(list1, list2, list3):
    print(i, j, k)

# 1 100 392
# 2 120 2
# 3 30 33
# 4 300 1
  • zipdict 생성자를 이용하면 두 리스트를 합쳐 딕셔너리로 만들 수 있다.
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']

dict(zip(animals, sounds))
# {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}