취준/코딩테스트

[Python] 코딩테스트 파이썬 문법 정리

린구 2024. 8. 24. 15:04
반응형

 

이제 본격적으로 취업 준비를 해야 한다..

맨날 까먹는 파이썬 문법을 정리해보자!

 

 

리스트 컴프리헨션

- 리스트를 `초기화`하는 방법

- 2차원 리스트 초기화 시 매우 효과적

 

# 0부터 19까지의 수 중에서 홀수만 포함하는 리스트
array = [i for i in range(20) if i % 2 == 1]

# 1부터 9까지의 수의 제곱 값을 포함하는 리스트
array = [i*i for i in range(1,10)]

# N * M 크기의 2차원 리스트 초기화
n = 3
m = 4
array = [[0] * m for _ in range(n) ] 
# [[0,0,0,0],[0,0,0,0], [0,0,0,0]]

 

 

리스트 관련 메서드

a = [1,4,3]

# 리스트에 원소 삽입
a.append(2)

# 오름차순 정렬
a.sort()

# 내림차순 정렬
a.sort(reverse = True)

# 리스트 원소 뒤집기
a.reverse()

# 특정 인덱스에 데이터 추가
a.insert(1,0) # 인덱스1 에 0추가

# 특정 값인 데이터 개수 세기
a.count(4)

# 특정 값 데이터 삭제 (인덱스가 낮은 것 하나)
a.remove(2)

 

튜플 자료형 

- `( )` 사용

- 값 변경 X

 

사전 자료형

- `key` `value` 쌍을 가지는 자료형

- `원소 in 사전` 형태 사용 가능 (리스트, 튜플도 가능)

data = dict()

...

# 키 데이터만 담은 리스트
key_list = data.keys()
value_list = data.values()

for key in key_list:
        print(data[key])

 

집합 자료형

- 중복 허용 X

- 순서 X

# 집합 자료형 초기화 방법 
a = set([1,2,3,4,5])
b = {3,4,5,6,7}

a | b # 합집합 {1,2,3,4,5,6,7}
a & b # 교집합 {3,4,5}
a - b # 차집합 {1,2}

# 새로운 원소 추가
data.add(4)

# 새로운 원소 여러 개 추가
data.update([5,6])

# 특정한 값을 갖는 원소 삭제
data.remove(3)

 

itertools

`permutations(리스트, 숫자)`

`combinations(리스트, 숫자)`

`product(리스트, 리스트 or repeat = 숫자)` - 데카르트 곱

`combinations_with-replacement(리스트, 숫자)`

from itertools import permutations, combinations, product,
                                            combinations_with_replacement
                                            
data = ['a', 'b', 'c']
result = list(permutations(data, 3)) # 모든 순열(순서가 있는) 구하기
result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기
result = list(product(data,repeat = 2)) # 2개를 뽑는 모든 순열 구하기 (중복 허용)
result = list(combinations_with_replacement(data, 2)) # 2개를 뽑는 모든 조합 구하기 (중복 허용)

[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]
[('a', 'b'), ('a', 'c'), ('b', 'c')]
[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'b'), ('b', 'c'), ('c', 'c')]

 

heapq

- 다익스트라, 최단 경로 알고리즘 에서 `우선순위 큐` 기능을 구현할 때 사용

- 최소 힙으로 구성, 오름차순 정렬됨

 

`heapq.heappush(힙, 값)`

`heapq.heappop(힙)`

 

# 힙 정렬
import heapq
def heapsort(iterable):
      h = []
      result = []
      for value in iterable:
              heapq.heappush(h, value)
      for i in range(len(h)):
              result.append(heapq.heappop(h))
      return result

result = heapsort([1,3,5,7,9,2,4,6,8,0])
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 부호를 사용하여 최대 힙(max heap) 구현
import heapq

def heapsort(iterable):
      h = []
      result = []
      for value in iterable:
              heapq.heappush(h, -value)
      for i in range(len(h)):
              result.append(-heapq.heappop(h))
      return result

result = heapsort([1,3,5,7,9,2,4,6,8,0])
#[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

 

bisect

- `이진탐색`을 쉽게 구현할 수 있는 라이브러리

 

`bisect_left(a, x)` 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾음

`bisect_right(a, x)` ~ 가장 오른쪽 인덱스를 찾음

-> 값이 특정 범위에 속하는 원소의 개수를 구하고자 할 때 사용

 

from bisect import bisect_left, bisect_right

a = [1, 2, 4, 4, 8]
x = 4

print(bisect_left(a, x))  # 2
print(bisect_right(a, x)) # 4

 

collections

- `deque` `counter` 제공

 

`deque` 스택, 큐를 구현할 때 사용하는 라이브러리

맨 앞 원소 추가, 원소 제거 O(1)

 

from collections import deque

data = deque([1, 2, 3])
data.appendleft(1)
data.append(5)

data.pop()
data.popleft()

 

math 

- 수학적인 기능을 제공하는 라이브러리

- `팩토리얼` `제곱근` `최대공약수`

import math

print(math.factorial(5)) # 팩토리얼 출력
print(math.sqrt(20)) # 제곱근 출력
print(math.gcd(3, 12)) # 최대공약수 출력
print(math.pi) # 파이 출력
print(math.e) # 자연상수 출력

 

반응형