파이썬 list 관련 함수 - 심화편

Dreambuilder·2021년 4월 17일
0

파이썬

목록 보기
2/7

heapq

: 최소 힙

import heapq

1. 생성

>>> heap = []

2. 추가

>>> heapq.heappush(heap, 4)
>>> heapq.heappush(heap, 2)
>>> heapq.heappush(heap, 5)
>>> heapq.heappush(heap, 1)
>>> heap
[1, 2, 5, 4]

3. 꺼내기

>>> heapq.heappop(heap)
1
>>> heapq.heappop(heap)
2
>>> heapq.heappop(heap)
4
>>> heapq.heappop(heap)
5

4. 기존 리스트 힙으로 전환

>>> heap = [4, 1, 7, 3, 8, 5]
>>> heapq.heapify(heap)
>>> heap
[1, 3, 5, 4, 8, 7]

5. 최대 힙

>>> nums = [4, 1, 7, 3, 8, 5]
>>> heap = []
>>> 
>>> for num in nums:
...   heapq.heappush(heap, (-num, num))  # (우선 순위, 값)
... 
>>> while heap:
...   print(heapq.heappop(heap)[1])  # index 1

6. K번째 최소값/최대값

def kth_smallest(nums, k):
  heap = []
  for num in nums:
    heapq.heappush(heap, num)

  kth_min = None
  for _ in range(k):
    kth_min = heapq.heappop(heap)
  return kth_min

print(kth_smallest([4, 1, 7, 3, 8, 5], 3))
4

zip

: 병렬처리

>>> for number, upper, lower in zip("12345", "ABCDE", "abcde"):
...     print(number, upper, lower)
...
1 A a
2 B b
3 C c
4 D d
5 E e

1. 되돌리기

import sys

board = []
for _ in range(3):
    board.append(list(map(int, sys.stdin.readline().strip().split())))

print(board)
board = list(zip(*board)) #병렬처리
print(board)
board = list(zip(*board)) #원상태로
print(board)

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

2. 딕셔너리로 만들기

>>> keys = [1, 2, 3]
>>> values = ["A", "B", "C"]
>>> dict(zip(keys, values)) 
# 길이 다를 때 가장 짧은 요소 이 후는 버림
{1: 'A', 2: 'B', 3: 'C'}
profile
상상이 실현되는 곳

0개의 댓글