hgk0404.tistory
Code After Work
hgk0404.tistory

공지사항

  • 블로그
전체 방문자
오늘
어제
  • 전체 카테고리
    • [컴퓨터비전]
    • [MLOps]
      • [FastAPI]
    • [Computer Science]
      • [컴퓨터네트워크]
      • [알고리즘]
      • [자료구조 in C]
      • [C & C++]
      • [이산수학]
      • [Math]
    • [머신러닝]
      • [Numpy, Pandas]
    • [Cloud]
      • [AWS]
      • [NCP]
      • [Kubernetes]
      • [Terraform]
    • [Dev]
      • [가상환경]
      • [Linux]
      • [Docker]
    • [Python]
    • [Coding Test]
      • [백준]
      • [프로그래머스]
      • [SQL]
    • [WEB]
    • [일상]
    • [엑셀]
    • [금융]

인기 글

최근 글

최근 댓글

250x250
hELLO · Designed By 정상우.
hgk0404.tistory

Code After Work

[Python]

[Python] 파이썬 PS를 위한 문법 정리 - 2차원 리스트 회전

2022. 7. 11. 22:36
728x90

디시인사이드 PS 마이너 갤러리에서 좋은 글을 찾아 그중에 저에게 필요한 내용을 정리하였습니다.

PS용 파이썬 문법 정리1

PS용 파이썬 문법 정리2

 

링크된 글에는 없지만 저에게 필요하다고 생각되는 부분도 추가하였습니다.

 

1. 무한값 생성

import sys
inf = sys.maxsize
print(inf)

 

결과)

9223372036854775807

 

from sys import maxsize
max_value = maxsize

이렇게 사용도 가능하다.

 

2. set 자료 값 찾을 때 사용

: 해시 구조이기 때문에 in 연산 시 O(1)의 시간 복잡도를 가집니다.

 

시간 복잡도 : O(n)

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(100):
    if i in data:
        print(True)

 

시간 복잡도 : O(1)

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data = set(data) #1
for i in range(100):
    if i in data:
        print(True)

 

3. enumerate

반복 가능한 각 요소에 인덱스 값을 할당합니다.

print(list(enumerate(['Alice', 'Bob', 'Jon'])))

 

[(0, 'Alice'), (1, 'Bob'), (2, 'Jon')]

 

 

4. * : iter자료형을 언팩킹합니다.

arr = [ 1, 2, 5, 8, 19, 20, 25, 40 ]
print(*arr)

 

결과)

1 2 5 8 19 20 25 40

 

5. join

* 연산자보다 문자열로 구성된 리스트라면 속도에서 빠릅니다.

arr = [ 'Samsung', 'kakao', 'Naver' ]
print(' '.join(arr))

 

결과)

Samsung kakao Naver

 

5-1. sep(separation) 연산자

print(*[[1, 2, 3, 4, 5], [5, 4, 3, 2, 1]], sep=' ')

 

결과)

[1, 2, 3, 4, 5] [5, 4, 3, 2, 1]

*연산자로 리스트 언패킹을 하고 sep=' '으로 두 리스트를 구분해서 출력해줍니다.

 

6. *연산자의 응용

def f(x, y, z):
    print(x, y, z)
    return x + y * z

print(f(*[1, 3, 4]))

 

결과)

1 3 4
13

매개변수가 일치하면 리스트를 언패킹 해서 인자로 넣어줍니다.

 

7. **연산자

사전의 (키, 값)을 이용해서 매개변수를 넣어주는 방법

def f(x, y, z):
    print(x, y, z)
    return x + y * z

print(f(**{'z': 4, 'x': 1, 'y': 3}))

 

결과)

1 3 4
13

 

7-1. 언패킹 후 두 개의 딕셔너리를 하나로 통합

x={'Alice' : 18}
y={'Bob' : 27, 'Ann' : 22}
z = {**x, **y}
# z = x | y # 동일 기능
print(z)

 

결과)

{'Alice': 18, 'Bob': 27, 'Ann': 22}

 

8. for-else문 while-else문

for i in range(N):
    for j in range(N):
        if sample[i][j] != 1:
        break
    else:
        # break로 끝나지 않았을 때 작동합니다!

 

9. [::-1]

n차원 리스트 뒤집기

lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(lst[::-1])

 

결과)

[[7, 8, 9], [4, 5, 6], [1, 2, 3]]

 

10. zip연산자

반복 가능한 요소들을 튜플화 합니다.

print(list(zip(['Alice', 'Anna'], ['Bob','Jon', 'Frank'])))

 

결과)

[('Alice', 'Bob'), ('Anna', 'Jon')]

'Frank'는 자기 짝을 찾지 못했기 때문에 사라지게 됩니다.

 

11. n 중 리스트 회전

def rotate(arr):
    return list(zip(*arr[::-1]))

print(rotate([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]]))

 

결과)

[(7, 4, 1), 
 (8, 5, 2), 
 (9, 6, 3)]

시계방향 90도 회전했습니다.

 

1. arr[::-1]으로 리스트를 뒤집습니다.

# [[7, 8, 9],

   [4, 5, 6],

  [1, 2, 3]]

2. *연산자로 리스트를 언패킹합니다.

# [7, 8, 9],

  [4, 5, 6],

 [1, 2, 3]

3. zip 함수를 사용하여 리스트 내의 인덱스가 같은 개체들을 서로 묶어줍니다.

# (7, 4, 1),

  (8, 5, 2),

 (9, 6, 3)

4. list()로 리스트로 변환합니다.

# [[7, 4, 1],

  [8, 5, 2],

 [9, 6, 3]]

 

12. 회전이 아닌 전치

def transposition(arr):
    return list(zip(*arr))

arr = [[1, 2, 3], 
       [4, 5, 6], 
       [7, 8, 9]]
print(transposition(arr))

 

결과)

[(1, 4, 7), 
 (2, 5, 8), 
 (3, 6, 9)]

 

역순으로 정렬하지 않고 바로 zip으로 묶어주면 됩니다.

 

13. -90도 회전(반시계방향회전)

 

11번은 90도 회전(시계방향회전)이었습니다. 반시계 90도 회전도 있습니다.

arr = [ [1, 2, 3], 
        [4, 5, 6], 
        [7, 8, 9] ]
rotate_minus_90 = list(zip(*arr))[::-1]
print(rotate_minus_90)

 

결과)

[(3, 6, 9), 
 (2, 5, 8), 
 (1, 4, 7)]

 

전치를 해준 상태에서 역순으로 정렬하면 반시계방향 90도가 됩니다.

 

14. 90, 180, 270도 시계, 반시계회전 함수

def rotate(m, d):
    N = len(m)
    ret = [[0] * N for _ in range(N)]

    if d % 4 == 1:
        for r in range(N):
            for c in range(N):
                ret[c][N-1-r] = m[r][c]
    elif d % 4 == 2:
        for r in range(N):
            for c in range(N):
                ret[N-1-r][N-1-c] = m[r][c]
    elif d % 4 == 3:
        for r in range(N):
            for c in range(N):
                ret[N-1-c][r] = m[r][c]
    else:
        for r in range(N):
            for c in range(N):
                ret[r][c] = m[r][c]

    return ret
arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
print(rotate(arr, 2))

 

m: 회전하고자 하는 2차원 배열. 입력이 정방형 행렬이라고 가정한다.

d: 90도씩의 회전 단위. -1: -90도, 1: 90도, 2: 180도, ...

 

 

 

728x90
저작자표시 동일조건 (새창열림)

'[Python]' 카테고리의 다른 글

[Python] insert연산  (0) 2022.07.13
[Python] deque를 사용한 1차원 리스트 회전하기 - rotate()  (0) 2022.07.11
[Python] 파이썬 max, min 함수 - max(map(max, graph))  (0) 2022.07.06
[Python] 파이썬 ord함수, chr함수 차이점  (0) 2022.07.06
[Python] Counter 모듈 사용법  (0) 2022.07.05
'[Python]' 카테고리의 다른 글
  • [Python] insert연산
  • [Python] deque를 사용한 1차원 리스트 회전하기 - rotate()
  • [Python] 파이썬 max, min 함수 - max(map(max, graph))
  • [Python] 파이썬 ord함수, chr함수 차이점
hgk0404.tistory
hgk0404.tistory
공부기록

티스토리툴바