https://velog.io/@ash3767/python-Counter
from collections import Counter
myList = [1,1,2,3,4,5,3,2,3,4,2,1,2,3]
print Counter(myList)
#Counter({2: 4, 3: 4, 1: 3, 4: 2, 5: 1})
print Counter(myList).items()
#[(1, 3), (2, 4), (3, 4), (4, 2), (5, 1)]
print Counter(myList).keys()
#[1, 2, 3, 4, 5]
print Counter(myList).values()
#[3, 4, 4, 2, 1]
위에...보면 이해가 될것같다.
사용할때마다 하나씩 추가하기로 한다.
# collections.deque
deq = collections.deque(['a', 'b', 'c'])
deq.append('d')
print(deq)
'''
결과
deque(['a', 'b', 'c', 'd'])
'''
import collections
deq = collections.deque(['a', 'b', 'c'])
deq.appendleft('d')
print(deq)
'''
결과
deque(['d', 'a', 'b', 'c'])
'''
우리는 앞으로 queue 를 사용해서 insert 한다거나 list pop 을 이용하지 말고
deque 을 사용하도록 한다.
import collections
deq = collections.deque(['a', 'b', 'c'])
while True:
try:
print(deq.pop(), end=' ') # c b a
except IndexError:
break
print(deq) # deque([])
import collections
deq = collections.deque(['a','b','c'])
while True:
try:
print(deq.popleft() , end=' ') # a b c
except IndexError:
break
rotate 같은 경우는 정말 생소할것같다.
시계방향으로 가면 양수 , 반시계 방향으로 가면 음수라고 생각하면 좀 더 이해하기가 편하다.
# 예제7. rotate(n)
import collections
deq = collections.deque(['a', 'b', 'c', 'd', 'e'])
deq.rotate(1)
print('deq >>', ' '.join(deq)) # e a b c d
deq2 = collections.deque(['a', 'b', 'c', 'd', 'e'])
deq2.rotate(2)
print('deq2 >>', ' '.join(deq2)) # d e a b c
deq3 = collections.deque(['a', 'b', 'c', 'd', 'e'])
deq3.rotate(-1)
print('deq3 >>', ' '.join(deq3)) # b c d e a
deq4 = collections.deque(['a', 'b', 'c', 'd', 'e'])
deq4.rotate(-2)
print('deq4 >>', ' '.join(deq4)) # c d e a b
힙은 특정한 규칙을 가지는 트리이다.
최댓값과 최솟값을 찾는 연산을 빠르게 해준다.
하지만 파이썬에서는 최소힙만 제공함으로 만약에 최대값을 찾을려고 하면 ,
최소값을 구한뒤에 음수로 구하면 된다.
https://docs.python.org/ko/3.10/library/heapq.html
( 뭔가.. 공식문서가 짱인것 같다 )
삽입할 리스트명을 입력하고 , 요소를 입력하면 된다.
heappush()
로 삽입하게 되면 , 매번 heapify()
가 일어나게 된다.
import heapq
heap = []
heapq.heappush(heap , 20)
heapq.heappush(heap , 40)
heapq.heappush(heap , 30)
heapq.heappush(heap , 10)
heapq.heappush(heap , 50)
print(heap) # [10, 20, 30, 40, 50]
heapq.heappop()
을 하게되면 , 가장 작은 항목을 팝하고 반환 한다.
heap = [10 , 30 , 40]
heapq.heapify(heap)
print(heap) # [10,30,40]
import heapq
heap = [3,2,1]
heapq.heapify(heap)
print(heap[0]) # 1
heappop
함수는 가장 작은 원소를 힙에서 제거함과 동시에 그를 결과값으로 리턴한다.
import heapq
heap = [3,2,1]
heapq.heapify(heap)
print(heapq.heappop(heap)) # 1
print(heap)# [2,3]
import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = collections.defaultdict(list)
for k , v in s:
d[k].append(v)
print(d)
# defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
defaultdict
을 사용하게되면 dict
안에 값이 없게 되더라도 에러가 발생하지 않고 ,
key
와 value
추가가 된다.
graph[node]
를 해석하면 graph[1]
이 되고
dictionary graph
의 값을 보면 , 해당하는 키값이 분명히 없다 그러면 ..
반복문안으로 안들어가게 될테고 , while
문으로 가야 할것이다.
하지만
graph
에 데이터가 추가가 된다.