Python

파트4. 2차원 리스트 뒤집기

누구용 2022. 7. 13. 22:35

다음을 만족하는 함수, solution을 완성해주세요. 

  • solution 함수는 이차원 리스트, mylist를 인자로 받습니다
  • solution 함수는 mylist 원소의 행과 열을 뒤집은 한 값을 리턴해야합니다.

예를 들어 mylist [[1, 2, 3], [4, 5, 6], [7, 8, 9]]가 주어진 경우, solution 함수는 [[1, 4, 7], [2, 5, 8], [3, 6, 9]] 을 리턴하면 됩니다.

제한 조건

  • mylist의 원소의 길이는 모두 같습니다.
  • mylist의 길이는 mylist[0]의 길이와 같습니다.
  • 각 리스트의 길이는 100 이하인 자연수입니다.

제출한 정답

def solution(mylist):
    size = len(mylist[0])
    answer = [[mylist[j][i] for j in range(size)] for i in range(size)]
            
    return answer

예측 오답

def solution(mylist):
    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])
            
    return new_list

풀이 정답

def solution(mylist):
	mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
	new_list = list(map(list, zip(*mylist)))
    return new_list

zip 함수는 정말 다양한 방법으로 사용할 수 있는 것 같다.

기본적으로는 zip(*iterables)는 각 iterables의 요소들을 모으는 이터레이터를 만든다.

*mylist를  출력해보면 [1, 2, 3] [4, 5, 6] [7, 8, 9]이 나온다

zip 으로 묶었을때 zip([1, 4, 7], [4, 5, 6], [7, 8, 9])를 해보면

반복될때 순서대로 요소들을 반환하기 때문에 쉽게 unpacking 할 수 있다.

 

아래의 예제를 보면 더 쉽게 이해가 될 것으로 생각된다.

mylist = [1, 2, 3]
new_list = [40, 50, 60]
for i in zip(mylist, new_list):
    print (i)

(1, 40)
(2, 50)
(3, 60)