알고리즘을 풀다보면 이차원 배열을 뒤집어야하는 문제가 가끔 나온다.
그럴때마다 그때 그때 이해해서 적었지만 이것을 정리하고 싶어서 글을 쓴다.
1. " * "
python에서 아스트리크(*)은 unpack역할을 한다.
첫줄은 이차원 배열 , 두번째 줄은 이차원 배열에서 *를 한 결과이다.
첫줄은 각 리스트들이 하나의 리스트로 연결되어있지만
두번째 줄은 리스트들이 unpack된것을 확인할 수 있다.
2. zip()
zip은 iterable한 것들을 엮어준다.
지퍼를 올리는 것처럼 양측의 데이터를 짝을 지어준다.
아스트리크(*)와 zip을 함께 사용하면? 무슨 일이 일어날까?
a = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
print(zip(*a))
print(list(zip(*a)))
일단 첫줄을 실행하면 zip type으로 반환되기 때문에 <zip object at 0x000001B1B38AE400> 이런식으로 출력된다.
list와 같은 형식으로 감싸주어야 우리가 원하는 대로 출력할 수 있다.
둘째줄의 실행 결과는
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)] 이다.
이차원 배열을 열끼리 묶어 하나의 리스트로 만든 이차원 튜플형태가 된다.
그 이유는 아래 코드처럼 각각 리스트로 나누어 zip을 실행되기 때문이다.
num = [1,2,3,4]
num2 = [5,6,7,8]
num3 = [9,10,11,12]
print(list(zip(num,num2,num3)))
* 을 통해서 a에 있는 각 리스트들을 unpack하고 zip을 통해서 index가 동일한 것끼리 묶는다.
그래서 이를 통해 행과 열을 바꿀 수 있는 것이다.
0행 0열 -> 0행 0열
1행 0열 -> 0행 1열
2행 0열 -> 0행 2열
....
'알고리즘 > 알고리즘 개념' 카테고리의 다른 글
[python]유니온파인드 알고리즘_이것도 알아야해? (0) | 2022.08.24 |
---|---|
비트마스크? 그게 뭔데 (0) | 2022.08.11 |
순열을 구해보자. (중복 순열과 그냥 순열) (0) | 2022.07.19 |
[python 구현]DFS에서 꼭 필요한 개념 - 조합 (combination) (0) | 2022.07.11 |
백트래킹과 DFS가 무슨 관계인가요? (0) | 2022.07.01 |