python collection 등등

BackEnd_Ash.log·2021년 3월 10일
0

파이썬

목록 보기
28/34

📌from collections import Counter

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]

위에...보면 이해가 될것같다.

사용할때마다 하나씩 추가하기로 한다.

📌from collections import deque

👉append

# collections.deque
deq = collections.deque(['a', 'b', 'c'])
deq.append('d')
print(deq)
'''
결과
deque(['a', 'b', 'c', 'd'])
'''

👉appendleft

import collections
deq = collections.deque(['a', 'b', 'c'])
deq.appendleft('d')
print(deq)
'''
결과
deque(['d', 'a', 'b', 'c'])
'''

우리는 앞으로 queue 를 사용해서 insert 한다거나 list pop 을 이용하지 말고

deque 을 사용하도록 한다.

👉pop

import collections

deq = collections.deque(['a', 'b', 'c'])
while True:
    try:
        print(deq.pop(), end=' ')  # c b a
    except IndexError:
        break

print(deq)  # deque([])

👉popleft

import collections

deq = collections.deque(['a','b','c'])
while True:
    try:
        print(deq.popleft() , end=' ') # a b c
    except IndexError:
        break

👉rotate

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

📌import heapq

힙은 특정한 규칙을 가지는 트리이다.
최댓값과 최솟값을 찾는 연산을 빠르게 해준다.

하지만 파이썬에서는 최소힙만 제공함으로 만약에 최대값을 찾을려고 하면 ,
최소값을 구한뒤에 음수로 구하면 된다.

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]

📌from collections import defaultdict

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 안에 값이 없게 되더라도 에러가 발생하지 않고 ,
keyvalue 추가가 된다.

👉 defaultdict 특징?

graph[node] 를 해석하면 graph[1] 이 되고

dictionary graph 의 값을 보면 , 해당하는 키값이 분명히 없다 그러면 ..

반복문안으로 안들어가게 될테고 , while 문으로 가야 할것이다.

하지만

graph 에 데이터가 추가가 된다.

profile
꾸준함이란 ... ?

0개의 댓글