파이썬을 파이썬 답게

YoungJin Cho·2021년 3월 26일
0

코딩테스트

목록 보기
3/7

*divmod() -> 목과 나머지를 구해준다. 작은 숫자를 다룰 때는 a//b, a%b 보다 느리지만, 큰 수를 다룰 때는 divmod가 더 빠르다.

int(value, radix) -> int함수의 인자로 문자열 value, 와 radix를 넣으면 radix진수의 value값을 10진수로 바꾸어준다.

상수(constants)

import string

print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.digits)

실행결과 :

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789

zip

python에서는
파이썬의 zip과 unpacking 을 이용하면 코드 한 줄로 리스트를 뒤집을 수 있습니다.

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = list(map(list, zip(*mylist)))

mylist = [1, 2, 3]
new_list = [40, 50, 60]
for i in zip(mylist, new_list):
    print (i)

(1, 40)
(2, 50)
(3, 60)

list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
for i, j, k in zip(list1, list2, list3):
   print(i + j + k)
   
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}

abs

abs는 파이썬의 절댓값 함수이다.

a = -2
print(abs(a))

2

숫자를 담은 리스트 mylist가 solution 함수의 파라미터로 주어집니다. solution 함수가 mylist의 i번째 원소와 i+1번째 원소의 차를 담은 일차원 리스트에 차례로 담아 리턴하도록 코드를 작성해주세요.

단, 마지막에 있는 원소는 (마지막+1)번째의 원소와의 차를 구할 수 없으니, 이 값은 구하지 않습니다.

내 풀이 :

def solution(mylist):
    answer = []
    for i in range(len(mylist) - 1):
        if mylist[i] > mylist[i+1]:
            answer.append(mylist[i] - mylist[i+1])
        else:
            answer.append(mylist[i+1] - mylist[i])
    return answer

zip을 이용한 풀이:

def solution(mylist):
    answer = []
    for i, j in zip(mylist, mylist[1:]):
        answer.append(abs(i - j))
    return answer

zip을 이용하면 index에 접근하지 않고 각 원소에 접근할 수 있다.

map

파이썬에서는 map을 이용하면 for 문을 사용하지 않고도 타입을 일괄 변환할 수 있다.

join

join을 사용하면 시퀀스의 멤버들을 string으로 이어붙일수 있다.

my_list = ['1', '100', '33']
answer = ''.join(my_list)

'110033'

project

파이썬에서는 itertools.product를 이용하면, for 문을 사용하지 않고도 곱집합을 구할 수 있다.

import itertools

iterable1 = 'ABCD'
iterable2 = 'xy'
iterable3 = '1234'
print(list(itertools.product(iterable1, iterable2, iterable3)))

[('A', 'x', '1'), ('A', 'x', '2'), ('A', 'x', '3'), ('A', 'x', '4'), ('A', 'y', '1'), ('A', 'y', '2'), ('A', 'y', '3'), ('A', 'y', '4'), ('B', 'x', '1'), ('B', 'x', '2'), ('B', 'x', '3'), ('B', 'x', '4'), ('B', 'y', '1'), ('B', 'y', '2'), ('B', 'y', '3'), ('B', 'y', '4'), ('C', 'x', '1'), ('C', 'x', '2'), ('C', 'x', '3'), ('C', 'x', '4'), ('C', 'y', '1'), ('C', 'y', '2'), ('C', 'y', '3'), ('C', 'y', '4'), ('D', 'x', '1'), ('D', 'x', '2'), ('D', 'x', '3'), ('D', 'x', '4'), ('D', 'y', '1'), ('D', 'y', '2'), ('D', 'y', '3'), ('D', 'y', '4')]

2차원 -> 1차원 변환

문자열을 담은 이차원 리스트, mylist 가 solution 함수의 파라미터로 주어집니다. solution 함수가 mylist를 일차원 리스트로 만들어 리턴하도록 코드를 작성해주세요.

my_list = [[1, 2], [3, 4], [5, 6]]

방법 1 - sum 함수

answer = sum(my_list, [])

방법 2 - itertools.chain

import itertools
list(itertools.chain.from_iterable(my_list))

방법 3 - itertools와 unpacking

import itertools
list(itertools.chain(*my_list))

방법 4 - list comprehension 이용

[element for array in my_list for element in array]

방법 5 - reduce 함수 이용 1

from functools import reduce
list(reduce(lambda x, y: x+y, my_list))

방법 6 - reduce 함수 이용 2

from functools import reduce
import operator
list(reduce(operator.add, my_list))

flatten

flatten은 각 원소의 길이가 다른 경우에는 사용 불가
ex) [['A', 'B'], ['X', 'Y'], ['1’]]

순열과 조합

순열과 조합을 itertools의 permutations와 combinations로 구할 수 있다.

from itertools import permutations 
def solution(mylist):
    print(sorted(list(permutations(mylist))))
    print(sorted(list(combinations(mylist, len(mylist)))))
    
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
[(1, 2, 3)]

Counter

collectionse.Counter

어떤 원소가 몇 번 등장하는지 세야할 때 Counter를 쓴다.

sqrt

제곱근


내 풀이 :

def solution(mylist):
    answer = []
    for i in mylist:
        if i % 2 == 0:
            answer.append(i * i)
    return answer

List comprehension을 이용한 풀이:

def solution(mylist):
    answer = [i**2 for i in mylist if i%2 == 0]
    return answer

실행결과 : [4, 36]

for-else

보통 프로그래밍 언어에서 'else'라고 하면 if와 함께 오는 경우가 거의 대부분입니다.
하지만 파이썬에서는 for 문과도 함께 쓰기도 합니다.
for와 함께 쓰는 else는, for문이 중간에 break 등으로 끊기지 않고,
끝까지 수행 되었을 때 수행하는 코드를 담고 있습니다.
코딩을 하다 보면 for문이 중간에 break 되었는지, 되어있지 않는지 판별해야 되는 경우가 많이 있습니다.
테스트 변수를 둬서 확인하는 등으로 처리합니다
파이썬에서는 else의 사용으로 간단하게 해결할 수 있습니다.
if문에 else를 사용하듯이 else를 사용하게 됩니다.
else의 들여쓰기는 for와 일치해야 합니다.

swap

이진탐색

inf

with-as

profile
자율주행 개발자가 되고싶은 대학생입니다.

0개의 댓글