Algorithm

[Algorithm] 파이썬을 파이썬 답게 문법 사용하기(프로그래머스 참조)

반응형

# 이진 탐색 알고리즘 

import bisect
mylist = [1, 2, 3, 7, 9, 11, 33]
print(bisect.bisect(mylist, 3))

 

# swap

a = 3
b = 'abc'
a, b = b, a

 

 

# for / if / i**2

mylist = [3, 2, 6, 7]
answer = [ i**2 for i in mylist if i %2 == 0]
for 문 앞에 있는 것을 출력으로 나타내고가운데는 
for 문으로 하고 그 뒤에 if문은 조건을 나타낸다.
이렇게 출력 / for / if 문을 한번에 나타낸다.
for i in mylist:   if i %2 == 0:    i**2

 

# 가장 많이 등장하는 알파벳 찾기 - Counter

import collections
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 7, 9, 1, 2, 3, 3, 5, 2, 6, 8, 9, 0, 1, 1, 4, 7, 0]
answer = collections.Counter(my_list)
print(answer[1]) # = 4
print(answer[3]) # = 3
print(answer[100]) # = 0

 

 

# 순열과 조합 - combinations, permutations

itertools.permutation를 이용하면, for문을 사용하지 않고도 순열을 구할 수 있습니다.

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

 

 

# 2차원 리스트를 1차원 리스트로 만들기 - from_iterable

 

my_list = [[1, 2], [3, 4], [5, 6]]
# 방법 1 - sum 함수
answer = sum(my_list, [])->[1,2,3,4,5,6]

# 방법 2 - itertools.chainimport 
itertoolslist(itertools.chain.from_iterable(my_list))

# 방법 3 - itertools와 unpackingimport 
itertoolslist(itertools.chain(*my_list))

# 방법4 - list comprehension 이용
[element for array in my_list for element in array]

# 방법 5 - reduce 함수 이용1
from functools import reducelist(reduce(lambda x, y: x+y, my_list))

# 방법 6 - reduce 함수 이용2
from functools import reduceimport operatorlist(reduce(operator.add, my_list))

# 방법 7 - numpy 라이브러리의 flatten 이용
import numpy as np
np.array(my_list).flatten().tolist()

 

 

 

# 곱집합(Cartesian product) 구하기 - product

 

import itertools

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

 

 

# 삼각형 별찍기 - sequence type의 * 연산

 

n = 어쩌고
answer = 'abc'*n

n = 어쩌고
answer= [123, 456]*n

 

 

# sequence 멤버를 하나로 이어붙이기 - join

 

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

 

 

 

# 모든 멤버의 type 변환하기 - map

 

list1 = ['1', '100', '33']
list2 = list(map(int, list1))

 

 

 

# 2차원 리스트 뒤집기 - ⭐️zip⭐️

 

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

(1, 40)
(2, 50)
(3, 60)
사용 예 #1 - 여러 개의 Iterable 동시에 순회할 때 사용
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 )
사용 예 #2 - Key 리스트와 Value 리스트로 딕셔너리 생성하기
파이썬의 zip 함수와 dict 생성자를 이용하면 코드 단 한 줄로, 두 리스트를 합쳐 딕셔너리로 만들 수 있습니다.
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}

 

 

 

# 알파벳 출력하기 - string 모듈

 

import string

string.ascii_lowercase # 소문자 abcdefghijklmnopqrstuvwxyz
string.ascii_uppercase # 대문자 ABCDEFGHIJKLMNOPQRSTUVWXYZ
string.ascii_letters #대소문자 모두 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
string.digits # 숫자 0123456789

 

 

# 문자열 정렬하기 - ljust, center, rjust

s = '가나다라'
n = 7

s.ljust(n) # 좌측 정렬
s.center(n) # 가운데 정렬
s.rjust(n) # 우측 정렬

 

 

# n진법으로 표기된 string을 10진법 숫자로 변환하기 - int 함수

num = '3212'
base = 5
answer = int(num, base)

 

# 몫과 나머지 - divmod

a = 7
b = 5
print( *divmod(a, b) )

반응형