디시인사이드 PS 마이너 갤러리에서 좋은 글을 찾아 그중에 저에게 필요한 내용을 정리하였습니다.
링크된 글에는 없지만 저에게 필요하다고 생각되는 부분도 추가하였습니다.
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도, ...
'[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 |