알고리즘에서 써먹을 수 있는 파이썬 문법들
a, b = 1, 2
len(list) == len(set(list))
for idx, data in enumerate(list):
list comprehension
list[n:]
max( ), min( )
- ...
- sys라이브러리로 입력 데이터 크기 조절
import sys
input = sys.stdin.readline
inf
: 무한대에 가까운 값a, b, c, d = list(), 1, 0, dict()
: 이거 한줄로 표현 가능- 형변환
str()
int()
- float는 쓰지말자
- 분수는 튜플형식으로 저장하자
+
보다는str.join()
를 쓰자.split(기준, 몇번 쪼갤지)
: 문자열을 어떠한 기준으로 나눌 때 사용.replace(찾을 값, 바꿀 값, 바꿀 횟수)
: 문자열의 문자를 변경할 때 사용chr()
: 아스키 코드 값을 문자로 변환ord()
: 특정한 한 문자를 아스키 코드 값으로 변환
range(stop)
: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9range(start, stop)
: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10range(start, stop, step)
: 0, 2, 4, 6, 8, 10, 12, 14, 16, 18- 리스트에서 하나하나 가져옴:
for a in list:
for idx, data in enumerate(list):
리스트 안의 인덱스 번호와 데이터를 반환
- 초기화:
list = []
- 값 추가:
list.append(들어갈 값)
- 최대, 최소:
max(list)
,min(list)
- list comprehension
# 일반적인 list에 넣는 for문 방식
list = []
for n in range(1,11):
if(n % 3 == 0):
list.append(n)
# list comprehension(이걸 잘 사용해보자)
list = [n for n in range(1, 11) if n % 3 == 0]
-
index
list[-1]
: 가장 마지막 인덱스list[0:]
: 처음부터 끝까지list[0:-1]
: 처음부터 마지막의 바로 앞까지list[1:3]
: 1번부터 2번까지list[::-1]
: 리스트 역순으로 읽기
-
a, b = [1,2]
=>a = 1, b = 2
-
리스트 연결:
list3 = list1 + list2
-
리스트 자체를 뒤에 추가:
list.extend([4,5])
-
지우기:
del list[1]
-
맨 끝 인덱스 꺼내기(Stack):
list.pop(-1)
-> list의 마지막 인덱스가 사라지고 그 부분은 사라지게 됨. -
첫 인덱스 꺼내기(Queue):
list.pop(0)
->list 0번 인덱스는 사라지고 뒤의 것이 자동으로 당겨져옴 -
list에 특정 값이 있는지 탐색
if a not in list:
-
정렬
- 오름차순 정렬:
list.sort()
- 순서 반대로:
list.reverse()
- 위의 둘 동시에:
list.sort(reverse=True)
- 원래 리스트는 두고 새로운 리스트 리턴:
list2 = sorted(list1)
-sorted(리스트, 기준, reverse=True)
- 오름차순 정렬:
-
reduce(함수, 순서형 자료)
: 누적으로 계산하기 위해 사용 -
filter(함수, 리스트)
: 특정조건으로 거른 것을 반환
()로 이루어진 형태
- 입력받기: a,b =
map(int, input().split())
a, b = b, a
Key와 Value가 한 쌍으로 이루어진 형태
-
for & Dictionary
distances = {node: float('inf') for node in graph}
-
빈 리스트로 초기화: defaultdict 함수를 사용해서, key에 대한 value를 지정하지 않았을 시, 빈 리스트로 초기화하기
-
dict.keys()
: 키값만 빼오기 -
dict.values()
: value값만 빼오기 -
dic['key'] = value
: key값에 value 삽입
from collections import defaultdict
list_dict = defaultdict(list)
print (list_dict['key1'])
중복을 해결해줌 but 시간복잡도가 큼
{}
len(list) == len(set(list))
: list의 중복값이 있는지 check- 값만 존재하고 키는 존재 X
set()
을 통해 집합 생성- 원소 추가
- 하나의 데이터 추가 :
set.add(100)
- 둘 이상의 데이터 추가:
set.update([3,4,5])
- 하나의 데이터 추가 :
- 원소 제거
set.remove(3)
set.discard(3)
- 집합 복사:
a = set.copy()
- 합집합:
c = a.union(b)
- 교집합:
c = a.intersection(b)
- 차집합:
c = a.difference(b)
- 대칭 차집합:
c = a.symmetric_difference(b)
- 부분집합의 여부 확인
a.issubset(b)
- 부분집합이면 Truea.issuperset(b)
- 부분집합이면 False
- 교집합의 여부 확인:
a.isdisjoint(b)
- 선언: 꼭
__init__(self, ~~)
로 선언 해줘야함
#객체지향으로 링크드 리스트 구현
class Node:
def __init__(self, data, next=None):
self.data = data
self.next = next
class NodeMgmt:
def __init__(self, data):
self.head = Node(data)
def add(self, data):
if self.head == '':
self.head = Node(data)
else:
node = self.head
while node.next:
node = node.next
node.next = Node(data)
def desc(self):
node = self.head
while node:
print (node.data)
node = node.next
기본적인 내장 함수로 queue가 있음
- 가져오기:
import queue
- 객체 생성:
data_queue = queue.Queue()
- 값 넣기:
data_queue.put(1)
- 값 꺼내기:
data_queue.get()
- 큐 크기:
data_queue.qsize()
- Lifo 큐 객체 생성:
data_queue = queue.LifoQueue()
- 우선순위 큐 객체 생성:
data_queue = queue.PriorityQueue()
- 값 넣기:
data_queue.put((5, 1))
heap queue를 라이브러리를 이용해 사용 가능
- 가져오기
import heapqueue
import heapq
from heapq import *
- 배열을 heap queue로 선언:
heapq.heapity(queue)
- 값 넣기:
heapq.heappush(queue, [2, 'A'])
- 값 꺼내기:
heapq.heappop(queue)
_ 우선순위가 낮은 순서대로 pop
리스트로 push, pop 모두 가능
내장된 함수들이 존재
- 해쉬 키 생성:
hash_data = hash(data)