[CheatSheet] 코딩테스트 Python

Joey Hong·2020년 12월 9일
1

range

range(start, end, step)

index

리스트에서 특정 값의 인덱스 찾기

a = [1, 2, 3, 4]
print(a.index(2))
# 1

거꾸로 iterate

numbers = [1, 2, 3, 4]
length = len(numbers)
for i in range(length):
	print(numbers[length - i])
# 4
# 3
# 2
# 1

첫 인덱스를 시작으로 거꾸로 iterate

프로그래머스 탐욕법에서 조이스틱 문제

  • AAA에서 키보드 상하좌우 키로 이름을 정할 때 만약 CAT을 만들고싶을 때
    • 인덱스 0에서 C 만들기
    • 인덱스 2로 가서 T 만들기
numbers = [1, 2, 3, 4]
length = len(numbers)
for i in range(length):
	print(numbers[-i])
# 1
# 4
# 3
# 2

enumerate

인덱스와 값을 바로 가져올 수 있다 (단, iterable 해야함)

string = hello
for i, v in enumerate(string):
	print(i, v)
# 0 h
# 1 e
# 2 l
# 3 l
# 4 o

ascii: ord(), chr()

파이썬에서는 C처럼 문자에 숫자를 더해 새로운 문자를 구할 수 없다
즉, 아래 식이 성립하지 않는다

'A' + 32 = 'a'

숫자는 숫자끼리 연산해야하기 때문에 ord() 함수로 아스키 숫자로 바꾼 후
그 숫자를 chr() 함수로 문자화해줘야한다

ord('A')
#65
chr(ord('A') + 32)
#a

dictionary get()

CODE라는 사전에서 키가 i 인 것의 값을 가져온다
i는 s의 항목이다

CODE.get(i) for i in s
CODE = {'a': '.-',     'b': '-...',   'c': '-.-.', 
                'd': '-..',    'e': '.',      'f': '..-.',
                'g': '--.',    'h': '....',   'i': '..',
                'j': '.---',   'k': '-.-',    'l': '.-..',
                'm': '--',     'n': '-.',     'o': '---',
                'p': '.--.',   'q': '--.-',   'r': '.-.',
                's': '...',    't': '-',      'u': '..-',
                'v': '...-',   'w': '.--',    'x': '-..-',
                'y': '-.--',   'z': '--..',
                }

s = "hello"

print(''.join(CODE.get(i) for i in s))
#......-...-..---

zip()

두 iterable을 하나의 튜플로 합치기
* 를 사용하면 튜플로 분리 가능

coordinate = ['x', 'y', 'z']
value = [3, 4, 5]

result = zip(coordinate, value)
result_list = list(result)
print(result_list)
# [('x', 3), ('y', 4), ('z', 5)]

c, v =  zip(*result_list)
print('c =', c)
print('v =', v)
c = ('x', 'y', 'z')
v = (3, 4, 5)

[::-1] reverse

배열을 똑같이 복사하되 반대 순서로

arr = [1, 2, 3, 4]
print(arr[::-1])
#[4, 3, 2, 1]

90도 회전 with zip

arr = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
      ]
arr[::-1]
# [	
#	[7, 8, 9],
#	[4, 5, 6],
#   	[1, 2, 3]
#  ]
  
tup = zip(*arr[::-1])
#(7, 4, 1)
#(8, 5, 2)
#(9, 6, 3)

print([list(elem) for elem in tup])
# [	
#	[7, 4, 1],
#	[8, 5, 2],
#   	[9, 6, 3]
#  ]

90도 회전

arr = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
      ]
new = [row[:] for row in arr]
m = len(arr[0])

for x in range(0,m):
	for j in range(0,m):
		new[j][m-1-x] = arr[x][j]
print(new)
# [	
#	[7, 4, 1],
#	[8, 5, 2],
#   	[9, 6, 3]
#  ]

[:n]

n번째까지

[n:]

n번째부터

map(function, iterable)

a = '123'

# a의 항목들에 int() 적용 convert to int
b = map(int, a)		#object
print(set(b))
# {1, 2, 3}

sum(iterable, start)

List 항목들의 합 구하기

a = [1, 2, 3, 4, 0, 2]

print(sum(a))
#12

map과 sum

문자열 내 문자들의 합 구하기

a = '123402'

sum(map(int, a[:3]))
# 6
  • a[:3] 은 '123'
  • map으로 '123'의 항목마다 int() 적용
  • sum으로 모두 int가 된 '123'의 각 항목들 더함
  • 1 + 2 + 3 = 6

삼항연산자

A if 조건 else B
numbers = [1, 3, 5, 7]
for i in range(len(numbers)):
	print(numbers[i], 'is smaller than 4') if numbers[i] < 4 else print(numbers[i], 'is bigger than 4')
# 1 is smaller than 4
# 3 is smaller than 4
# 5 is bigger than 4
# 7 is bigger than 4
  • 값을 지정할 때는
A = a if 조건 else b
num = 5
type = 'odd' if num % 2 == 1 else 'even'
# odd

str to list 변환

text = 'hello'
a = list(text)
print(a)
# ['h', 'e', 'l', 'l', 'o']

List = [ for in List]

numbers = [1, 2, 3, 4, 5]
upDown = [num * num for num in numbers]
print(upDown)
# [1, 4, 9, 16, 25]

n x m 2차배열 초기화

n = 4
m = 3
array = [[0] * m for _ in range(n)]

세로 n 가로 m 

deepcopy

참조가 아니라 복사할 때

from copy import deepcopy

a = [1, 2, 3]

b = a
b[0] = 7
print(b)
#[7, 2, 3]

c = deepcopy(a)
c[2] = 9
print(c)
#[1, 2, 9]
profile
개발기록

0개의 댓글