abs() : 절대값 리턴 함수
abs(숫자)
Python
복사
zip() : 동일 개수로 이루어진 데이터들을 묶어서 리턴하는 함수
•
출력시엔 list로 묶어줘야 내부가 보임
lst1 = [1,2,3]
lst2 = ['a', 'b', 'c']
for item in zip(lst1, lst2):
print(item[0], item[1])
Python
복사
len = 리스트 원소의 갯수
a = [1, 2, 3, 4]
len(a) # 리스트 원소의 개수 출력. 4
for i in range(len(a)):
print(a[i])
for x in a:
print(x)
Plain Text
복사
sum(객체) = 모든 원소 합
result = sum([7, 3, 2])
print(result) // 12
Python
복사
min/max(2개 이상 파람) = 가장 작은 값/가장 큰 값
result = max(7, 3, 5, 2)
print(result) // 7
result = min(7, 3, 5, 2)
print(result) // 2
Python
복사
eval(수식 형태의 문자열) : 수식 결과 반환
result = eval("(3 + 5) * 7)
print(result) // 56
Python
복사
sorted(iterable 객체, key=, reverse=bool) : 정렬, reverse = 오름/내림차순
result = sorted([9, 1, 8, 5, 4]) # 오름차순
print(result) # 1, 4, 5, 8, 9
result = sorted([9, 1, 8, 5, 4], reverse=True) # 내림차순
print(result) # 9, 8, 5, 4, 1
# 자료형을 리스트나 튜플로 한 경우
result = sorted([("홍길동", 35), ("이순신", 75), ("아무개", 50), key = lambda x: x[1], reverse=True)
print(result) # [('이순신', 75), ('아무개', 50), ('홍길동', 35)]
Python
복사
find
# "s"가 위치한 index 찾기
# 여러 개일 경우 가장 앞쪽 index
print(s.find("s")) # 7
Plain Text
복사
count
# 문자열 내의 "s"의 개수
print(s.count("s")) # 2
Plain Text
복사
enumerate()
•
순서가 있는 데이터(리스트, 튜플, 문자열)를 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴
for index, name in enumerate(['body', 'foo', 'bar']):
print(f'{index}번째, 이름: {name}')
Python
복사
isinstance()
•
isinstance(object, class)는 첫 번째 인수로 객첵, 두 번째 인수로 클래스를 받는다.
입력으로 받은 객체가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 리턴한다.
a = 3
isinstance(a, int), type(a)
Python
복사
import itertools
•
permutations : iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산
from itertools import permutations
data = ['A', 'B', 'C']
result = list(permutations(data, 3)) # 모든 순열 구하기
print(result) # [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
Python
복사
•
combinations : iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산
from itertools import combinations
data = ['A', 'B', 'C']
result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기
print(result) # [('A', 'B'), ('A', 'C'), ('B', 'C')]
Python
복사
•
product : permutations와 같이 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산한다. 다만 원소를 중복하여 뽑는다.
from itertools import product
data = ['A', 'B', 'C']
result = list(proudct(data, repeat = 2)) # 2개를 뽑는 모든 순열 구하기(중복 허용)
print(result) # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
Python
복사
•
combinations_with_replacement : combinations와 같이 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다. 다만 원소를 중복해서 뽑는다.
from itertools import combinations_with_replacement
data = ['A', 'B', 'C']
result = list(combinations_with_replacement(data, 2)) # 2개를 뽑는 모든 조합 구하기(중복 허용)
print(result) # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
Python
복사
import heapq (힙 정렬)
import heapq
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내기
for _ in range(len(h)):
result.append(heapq.heappop(h))
return result
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Python
복사
import heapq
# 최대 힙을 이용한 내림차순 힙 정렬
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, -value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내기
for _ in range(len(h)):
result.append(-heapq.heappop(h))
return result
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Python
복사
bisect
bisect 라이브러리는 정렬된 배열에서 특정한 원소를 찾아야 할 때 효과적 (이진탐색)
from bisect import bisect_left, bisect_right
a = [1, 2, 4, 4, 8]
x = 4
# 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스 반환
bisect_left(a, x) # 2
# 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스 반환
bisect_right(a, x) # 4
Python
복사
# 정렬된 리스트에서 값이 특정 범위에 속하는 원소의 개수 구하기
from bisect import bisect_left, bisect_right
# 값이 [l_value, r_value]인 원소의 개수를 반환하는 함수
def count_by_range(a, l_value, r_value):
l_index = bisect_left(a, l_value)
r_index = bisect_right(a, r_value)
return r_index - l_index
# 리스트 선언
a = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9]
# 값이 4인 데이터 개수 출력
print(count_by_range(a, 4, 4)) # >>> 2
# 값이 [-1, 3] 범위에 있는 데이터 개수 출력
print(count_by_range(a, -1, 3)) # >>> 6
Python
복사
collections
•
deque
: 보통 파이썬에서는 deque를 사용해 큐를 구현함
: 리스트 자료형과 다르게 인덱싱, 슬라이싱 등의 기능은 사용할 수 없음.
: 연속적으로 나열된 데이터의 시작 부분이나 끝 부분에 데이터를 삽입하거나 삭제할 때 매우 효과적임.
· popleft() : 첫 번째 원소 제거
· pop() : 마지막 원소 제거
· appendleft(x) : 첫 번째 인덱스에 원소 x를 삽입
· append(x) : 마지막 인덱스에 원소 x를 삽입
: 큐 자료구조를 이용할 때, append()와 popleft() 사용하기
from collections import deque
data = deque([2, 3, 4])
data.appendleft(1)
data.append(5)
print(data) # >>> deque([1, 2, 3, 4, 5])
print(list(data)) # >>> [1, 2, 3, 4, 5]
Python
복사
•
Counter : 리스트와 같은 iterable 객체가 주어졌을 때, 해당 객체 내부의 원소가 몇 번씩 등장했는지 알려줌
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue']) # >>> 3
print(counter['green']) # >>> 1
print(dict(counter)) # >>> {'red': 2, 'blue': 3, 'green': 1}
Python
복사
math
•
factorial(x) : x! 값 반환
import math
print(math.factorial(5)) # >>> 120
Python
복사
•
sqrt(x) : x의 제곱근 반환
import math
print(math.sqrt(7)) # >>> 2.6457513110645907
Python
복사
•
gcd(a,b) : a,b의 최대공약수
import math
print(math.gcd(21, 14)) # >>> 7
Python
복사
•
파이(pi), 자연상수 e
import math
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
Python
복사
치트 시트
•
리스트 중복 제거 & 정렬
a = [3, 1, 5, 8, 5, 10, 7, 1]
b = list(set(a)) # [1, 3, 5, 7, 8, 10]
c = sorted(list(set(a))) bisect min(strs, key=len) collections d,C # [1, 3, 5, 7, 8, 10]
d = sorted(list(set(a)), reverse=True) # [10, 8, 7, 5, 3, 1]
Python
복사
•
리스트 반복문에서 리스트 원소를 여러번 사용할 때
score = [80, 83, 95, 87, 93, 71]
for i, val in range(N):
if val < 90: # "score[i] < 90" 대신 짧고 편하게 사용 가능
print("B")
elif val < 80:
print("C")
elif val < 70:
print("D")
Python
복사
•
리스트 원소 개수 세기 (딕셔너리 활용)
s = [1, 3, 4, 2, 3, 4, 1, 3]
cnt = {} # dictionary 생성
for x in s:
if x in cnt:
cnt[x] += 1
else:
cnt[x] = 1
Python
복사
•
딕셔너리 value로 key값 찾기
for key, value in cnt.items():
if value == "찾을 value 값":
print(key, end=' ') # value에 해당하는 key 값 출력
Python
복사
•
swap = a, b = b, a
•
딕셔너리를 key 또는 value 기준으로 정렬
a = {'Tom': 90, 'Liz': 75, 'John': 67, 'Mia': 92}
print(a.keys()) # dict_keys(['Tom', 'Liz', 'John', 'Mia'])
print(list(a.keys())) # ['Tom', 'Liz', 'John', 'Mia']
print(sorted(a.keys())) # ['John', 'Liz', 'Mia', 'Tom']
print(sorted(a.keys(), reverse=True)) # ['Tom', 'Mia', 'Liz', 'John']
# 튜플 자료형으로 리턴
print(sorted(a.items()))
# 결과 : [('John', 67), ('Liz', 75), ('Mia', 92), ('Tom', 90)]
print(sorted(a.items(), reverse=True))
# 결과 : [('Tom', 90), ('Mia', 92), ('Liz', 75), ('John', 67)]
# 람다식 key값 기준 정렬
print(sorted(a.items(), key=lambda x: x[0]))
# 결과 : [('John', 67), ('Liz', 75), ('Mia', 92), ('Tom', 90)]
print(sorted(a.items(), key=lambda x: x[0], reverse=True))
# 결과 : [('Tom', 90), ('Mia', 92), ('Liz', 75), ('John', 67)]
# 람다식 value값 기준 정렬
print(sorted(a.items(), key=lambda x: x[1]))
# 결과 : [('John', 67), ('Liz', 75), ('Tom', 90), ('Mia', 92)]
print(sorted(a.items(), key=lambda x: x[1], reverse=True))
# 결과 : [('Mia', 92), ('Tom', 90), ('Liz', 75), ('John', 67)]
Python
복사
•
이분 탐색
a.sort() # 먼저 정렬
lt = 0 # 시작 값
rt = n-1 # 끝 값
while lt <= rt:
mid = (lt + rt) // 2
if a[mid] < m:
lt = mid + 1
elif m < a[mid]:
rt = mid - 1
elif m == a[mid]:
print(mid+1)
break
Python
복사
•
리스트 문자열 중 길이가 가장 짧은/긴 문자열 찾기
strs = ["banana", "apple", "watermelon", "strawberry"]
min_str = min(strs, key=len)
max_str = max(strs, key=len)
print(min_str)
Python
복사