[Python] 파이썬 함수 정리

그때그때 모르는 함수 있으면 정리해서 올리는 용도

목차

enumerate
map
Queue
Index
Zip
Sort
Heap
Permutation
Deque

파이썬 함수 정리

1. enumerate

  • for문에서 현재 반복이 몇번째 반복인지 확인할 때 사용한다.

주로 배열 내부를 순회하는 반복자를 선언하고 배열에서 연산자를 통해 값을 출력하는 경우

1
2
3
4
arr = [1,2,3]

for i in range(0,len(arr)):
print(i, arr[i])
1
2
3
4
실행결과
0 1
1 2
2 3

와 같이 사용할때, 간단히

1
2
3
4
arr = [1,2,3]

for i,v in enumerate(arr):
print(i, v)
1
2
3
4
실행결과
0 1
1 2
2 3

이와같이 사용할 수 있다.

2. map

map
map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다.
map은 입력받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려주는 함수이다.

1
2
3
def two_times(x): 
return x*2
list(map(two_times, [1, 2, 3, 4]))
1
2
실행결과
[2, 4, 6, 8]

lambda를 활용하면 더 간략하다.

1
list(map(lambda x: x * 2, [1, 2, 3, 4]))

3. Queue

기본적인 Queue 모듈

1
2
3
4
5
6
7
8
9
10
11
12
import queue

data = [3]

q = queue.Queue() # 큐 선언

q.put_nowait(data) # 데이터 삽입
print(q.queue[0]) # pop 없이 데이터 확인

q.get_nowait() # 데이터 확인

print(q.qsize()) # 큐 크기 확인

4. Index

위치 반환(index)
index(x) 함수는 리스트에 x 값이 있으면 x의 위치 값을 돌려준다.

1
2
a = [1,2,3]
a.index(3)
1
2
실행결과
2

5. Zip

동일한 갯수로 이루어진 자료형을 묶어주는 역할을 한다.

1
list(zip([1,2,3],[4,5,6],[7,8,9]))
1
2
실행결과 
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

사용처 : key/value 값이 각각 배열로 있을때, dictionary 를 사용하지 않아도 key-value 구조를 이용하도록 해준다.

for문에서 사용 시

1
2
3
4
5
a = [1, 2, 3]
b = [4, 5, 6]

for p, s in zip(a, b):
print(p,s)
1
2
3
4
실행결과
1 4
2 5
3 6

6. Sort

리스트 내 자료들을 특정 기준으로 정렬해준다. (default : 오름차순)

key, reverse 를 매개변수로 갖고있다.

매개변수 key 사용법

다중 조건으로 정렬해야 할 경우

1
2
3
numbers = [(1,2),(4,3),(4,5)]
# [0]번째 배열로 오름차순 비교후 [1]번째 배열로 내림차순으로 비교한다.
numbers.sort(key=lambda x : (x[0],-x[1]))
1
2
실행결과
[(1, 2), (4, 5), (4, 3)]

1차원 배열 내 특정 조건으로 배열해야 할 경우

  • functools라는 모듈을 가져와서 com_to_key 라는 함수를 사용해야 한다.(python 3 기준)
1
2
3
4
5
6
import functools

numbers = [3, 30, 34, 5, 9]
numbers = list(map(str, numbers))
numbers.sort(key=functools.cmp_to_key(lambda x, y: int(x + y) - int(y + x)),reverse=True)
# 문자열로 변환했을때 두 배열을 더해서 나온 문자열값이 큰 값을 앞으로 배치한다.
1
2
실행결과
['9', '5', '34', '3', '30']

매개변수 reverse 사용법

1
2
numbers = [1,3,2,5,6]
numbers.sort(reverse=True)
1
2
실행결과
[6, 5, 3, 2, 1]

7. Heap

파이썬 내 힙 자료구조를 사용법
heapq 라는 내장 모듈을 사용한다.
힙 자료구조를 사용할땐 보통 최소값만 있으면 다른건 아무것도 필요없을때 가장 빠른 속도를 위해서 사용한다.
push와 pop의 경우에는 매번 힙 구조로 정리까지 해주니 굳이 heapify 작업이 필요없다.

1
2
3
4
5
import heapq

heapq.heapify(list) # 리스트를 힙 구조로 바꿈 / 최소값이 0번째 index
heapq.heappush(list, data) # 힙 data 입력
list_min = heapq.heappop(list) # 힙 0번째 index 추출

8. Permutation

순열을 외부 모듈을 이용해서 구현한다.

1
2
3
4
5
import itertools

pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3개의 원소로 수열 만들기
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2개의 원소로 수열 만들기

9. Deque

양방향 큐 Deque 를 구현한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import collections

d = collections.deque([10, 20, 30, 40, 50])

d.append(60) # 오른쪽에 추가 deque([10, 20, 30, 40, 50, 60])

d.appendleft(0) # 왼쪽에 추가 deque([0, 10, 20, 30, 40, 50, 60])

d.extend([70, 80]) # 입력값을 순환하면서 오른쪽에 추가(append) deque([0, 10, 20, 30, 40, 50, 60, 70, 80])

d.extendleft([-10, -20, -30]) # 입력값을 순환하면서 왼쪽에 추가(appendleft)
# deque([-30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80])

d.remove(0) # 값 삭제
# deque([-30, -20, -10, 10, 20, 30, 40, 50, 60, 70, 80])

maxValue = d.pop() # 오른쪽의 끝값 가져오면서 deque에서 제거
# maxValue: 80
# deque([-30, -20, -10, 10, 20, 30, 40, 50, 60, 70])

minValue = d.popleft() # 왼쪽의 끝값 가져오면서 deque에서 제거
# minValue: -30
# deque([-20, -10, 10, 20, 30, 40, 50, 60, 70])

d = collections.deque(range(5)) # 값 회전(rotating)
# Deque: deque([0, 1, 2, 3, 4])

d.rotate(1)
# Deque.rotate(1): deque([4, 0, 1, 2, 3])

d.rotate(1)
# Deque.rotate(1): deque([3, 4, 0, 1, 2])

d.rotate(-1)
# Deque.rotate(-1): deque([4, 0, 1, 2, 3])

d.rotate(-1)
# Deque.rotate(-1): deque([0, 1, 2, 3, 4])
공유하기