Skip to content

Latest commit

ย 

History

History
248 lines (209 loc) ยท 6.24 KB

File metadata and controls

248 lines (209 loc) ยท 6.24 KB

ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž ์‹œ๊ฐ„ ๋ณต์žก๋„

https://dev.plusblog.co.kr/42

itertools

from itertools

์ค‘๋ณต์กฐํ•ฉ

combinations_with_replacement(iter, r) : A~E 5๋ช…์˜ ํ›„๋ณด๊ฐ€ ์žˆ๋‹ค. ์ค‘๋ณต์„ ํ—ˆ์šฉํ•ด 2๋ช…์˜ ๋Œ€ํ‘œ๋ฅผ ๋ฝ‘๋Š” ๋ฐฉ๋ฒ•

from itertools import combinations_with_replacement

list(combinations_with_replacement('ABC', 2)) #๊ฒฐ๊ณผ : 'AA' 'AB' 'AC' 'BB' 'BC' 'CC' 

์ค‘๋ณต์ˆœ์—ด

product(iter, r) : 1~5 ์ˆซ์ž์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ์ค‘๋ณต์„ ํ—ˆ์šฉํ•ด 2์ž๋ฆฌ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•.

from itertools import product

list(product('ABC', repeat=2)) #๊ฒฐ๊ณผ : 'AA' 'AB' 'AC' 'BA' 'BB' 'BC' 'CA' 'CB' 'CC'

heap

import heapq

๊ธฐ์กด ๋ฆฌ์ŠคํŠธ๋ฅผ ํž™์œผ๋กœ ๋ณ€ํ™˜

heapq.heapify( ๋ฆฌ์ŠคํŠธ )

a = [4,1,3,10]
heapq.heapify(a)  #๊ฒฐ๊ณผ: a๋Š” [1, 4, 3, 10]

-> ํž™์—์„œ ์ธ๋ฑ์Šค 0์ด ์ตœ์†Ÿ๊ฐ’์ด๋ผ๊ณ  ํ•ด์„œ, ์ธ๋ฑ์Šค 1์— ๋‘ ๋ฒˆ์งธ, ์ธ๋ฑ์Šค 2์— ์„ธ ๋ฒˆ์งธ๋กœ ์ž‘์€ ์›์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ๋กœ ์ž‘์€ ์›์†Œ๋ฅผ ์–ป์œผ๋ ค๋ฉด heappop()์„ ํ†ตํ•ด ์ตœ์†Ÿ๊ฐ’์„ ์‚ญ์ œํ•œ ํ›„ heap[0]๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ธ๋ฑ์Šค 1์„ ์ธ๋ฑ์Šค 2์™€ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. (์ตœ์†Œ๊ฐ’๋งŒ ๋ณด์žฅ)

hash

from collections import defaultdict

defaultdict(int)
defaultdict(list)

๋”•์…”๋„ˆ๋ฆฌ์— items() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด {"key" : value}์˜ ํ˜•ํƒœ๋ฅผ [(key, value)]์˜ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

๊ธฐ๋ณธ๋ฌธ๋ฒ•

d[k] = v  # (k, v) ์ถ”๊ฐ€
d.pop(k)  # key๊ฐ€ k์ธ ์Œ ์ฐพ์•„ ์ œ๊ฑฐ
k in d    # ํ˜„์žฌ hashmap์— key๊ฐ€ k์ธ ์Œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ

key ๊ฐ€๋Šฅ type immutableํ•œ ๊ฐ’ -> int, char ๋“ฑ์˜ primitive type๊ณผ string, tuple ๋“ฑ ๊ฐ€๋Šฅ, mutableํ•œ list, dict ๋“ฑ์˜ type์€ ๊ฐ€๋ณ€์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๊ฐ€

items, keys, values

print(d.items())   #dict_items([(1, 3), (2, 4), (-1, 6)])
print(d.keys())    #dict_keys([1, 2, -1])
print(d.values())  #dict_values([3, 4, 6])

key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋”•์…”๋„ˆ๋ฆฌ ์ •๋ ฌ

sorted(d)   #['blue', 'green', 'red']: list ํ˜•ํƒœ๋กœ return

value๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋”•์…”๋„ˆ๋ฆฌ ์ •๋ ฌ

sorted(d.items(), key=lambda x : x[1])   #[('red', 3), ('blue', 3), ('green', 1)]: list ํ˜•ํƒœ๋กœ return

value๊ฐ€ list์ธ ๊ฒฝ์šฐ

for key in d:
    d[key].sort()

set

๊ธฐ๋ณธ๋ฌธ๋ฒ•

s=set()
s.add(e)     # ๋ฐ์ดํ„ฐ e ์ถ”๊ฐ€
s.remove(e)  # ๋ฐ์ดํ„ฐ ์ค‘ ์ˆซ์ž e ์ฐพ์•„ ์ œ๊ฑฐ
e in s       # ํ˜„์žฌ hashset์— ์ˆซ์ž e๊ฐ€ ๋“ค์–ด ์žˆ๋Š”์ง€ ํ™•์ธ

ํ•ฉ์ง‘ํ•ฉ, ๊ต์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ

# a: {1,2,6}, b: {2,6,9}
a|b   #{1,2,6,9}
a&b   #{2,6}
a-b   #{1}

bisect

์ด์ง„ ํƒ์ƒ‰ ๋ชจ๋“ˆ

ํŠน์ • ๊ฐ’ ์œ„์น˜

ํ•ด๋‹น ๊ฐ’์ด ์œ„์น˜ํ•œ ๋งˆ์ง€๋ง‰ index ํ‘œ์‹œ

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

target ๊ฐ’ ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ index ์ถœ๋ ฅํ•˜๋ฏ€๋กœ target ๊ฐ’๊ณผ ๋™์ผํ•œ์ง€ checkํ•˜๋Š” ๋กœ์ง ํ•„์š”์š”

for _ in range(m):
    target = int(input())
    index = bisect.bisect_right(lst, target)
    if lst[index-1] == target:
        print(index)
    else:
        print(-1)

ํŠน์ • ๊ฐ’ ๊ฐฏ์ˆ˜

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

Math

import math

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

math.gcd( ์ˆซ์ž๋“ค )

math.gcd(12,8)  //๊ฒฐ๊ณผ: 4

Counter

์š”์†Œ๊ฐ€ ๋”•์…”๋„ˆ๋ฆฌ ํ‚ค๋กœ ์ €์žฅ๋˜๊ณ  ๊ฐœ์ˆ˜๊ฐ€ ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ’์œผ๋กœ ์ €์žฅ๋˜๋Š” ์ปฌ๋ ‰์…˜

from collections import Counter

๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ๋ฆฌํ„ด

Counter( [๋ฆฌ์ŠคํŠธ] or [๋ฌธ์ž์—ด] ).most_common( ์ถœ๋ ฅ๊ฐฏ์ˆ˜ )

๋ฌธ์ž์—ด

๋ฌธ์ž ๋“ฑ์žฅ ํšŸ์ˆ˜

"๋ณ„๋˜ฅ๋ณ„".count("๋ณ„") #๊ฒฐ๊ณผ: 2

๋ฌธ์ž์—ด ์ •๋ ฌ

๋ฌธ์ž์—ด์„ ์ •๋ ฌํ•˜๊ณ  ์‹ถ์„ ๋• sortํ•œ ๋‹ค์Œ์— join์œผ๋กœ ๋ฌถ์–ด์ค˜์•ผ ํ•œ๋‹ค. (sortํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค)

orders[i] = "".join(sorted(orders[i]))

๋ฌธ์ž์—ด ์ˆ˜์ •

๋ฌธ์ž์—ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„๋• list๋กœ ๋ณ€ํ™˜ ํ›„ idx์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ˆ˜์ •ํ•˜๊ณ  join์œผ๋กœ ๋ฌถ์–ด์ค€๋‹ค.

์ฐพ๊ธฐ

find() ํ•จ์ˆ˜๋Š” ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐพ๊ณ , rfind() ํ•จ์ˆ˜๋Š” ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์ฐพ๋Š”๋‹ค.

  • ๋ฌธ์ž๊ฐ€ ์—†๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜
  • ๋ฌธ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋‹ค๋ฉด ๋งจ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
"๋ณ„๋˜ฅ๋ณ„".find("๋ณ„") #๊ฒฐ๊ณผ: 0
"๋ณ„๋˜ฅ๋ณ„".rfind("๋ณ„") #๊ฒฐ๊ณผ: 2

๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜

  • ๋ฌธ์ž์—ด.swapcase() # ์†Œ๋ฌธ์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ, ๋Œ€๋ฌธ์ž๋Š” ์†Œ๋ฌธ์ž๋กœ ์„œ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ฉ”์„œ๋“œ
"abc".upper() #๊ฒฐ๊ณผ: "ABC"
"ABC".lower() #๊ฒฐ๊ณผ: "abc"
"aBc".swapcase() #๊ฒฐ๊ณผ: "AbC"

๊ณต๋ฐฑ ์ œ๊ฑฐ

  • ๋ฌธ์ž์—ด.strip()

๋ฌธ์ž ๋ณ€๊ฒฝ

  • ๋ฌธ์ž์—ด.replace(old, new)

์•„์Šคํ‚ค ์ฝ”๋“œ ๋ณ€ํ™˜

  • ๋ฌธ์ž -> ์•„์Šคํ‚ค ์ฝ”๋“œ : ord('A')
  • ์•„์Šคํ‚ค ์ฝ”๋“œ -> ๋ฌธ์ž : chr(65)

์ง„์ˆ˜ ๋ณ€ํ™˜

10์ง„์ˆ˜ -> n์ง„์ˆ˜

#1. bin(x)[2:]): ๋‚ด์žฅํ•จ์ˆ˜ bin ์‚ฌ์šฉ
#2. 
def change_10to2(n):
    tmp = []
    while n > 0:
        tmp.append(str(n%2))
        n //= 2
    tmp = tmp[::-1]
    return tmp

n์ง„์ˆ˜ -> 10์ง„์ˆ˜

int(๋ฌธ์ž์—ด ๊ฐ’, n)

zip ํ•จ์ˆ˜

๊ฐ iterables ์˜ ์š”์†Œ๋“ค์„ ๋ชจ์œผ๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŠœํ”Œ์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋Œ๋ ค์ฃผ๋Š”๋ฐ, i ๋ฒˆ์งธ ํŠœํ”Œ์€ ๊ฐ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ์‹œํ€€์Šค๋‚˜ ์ดํ„ฐ๋Ÿฌ๋ธ”์˜ i ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ #1 - ์—ฌ๋Ÿฌ ๊ฐœ์˜ Iterable ๋™์‹œ์— ์ˆœํšŒํ•  ๋•Œ ์‚ฌ์šฉ

list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
for number1, number2, number3 in zip(list1, list2, list3):
   print(number1 + number2 + number3)

์‚ฌ์šฉ ์˜ˆ #2 - Key ๋ฆฌ์ŠคํŠธ์™€ Value ๋ฆฌ์ŠคํŠธ๋กœ ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑํ•˜๊ธฐ

animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}

List Comprehension

for ๋ฌธ๊ณผ if๋ฌธ์„ ํ•œ๋ฒˆ์—

mylist = [3, 2, 6, 7]
answer = [number**2 for number in mylist if number % 2 == 0]

for-else๋ฌธ

flag ๋Œ€์‹  ์‚ฌ์šฉ. for loop๊ฐ€ break์—†์ด ๋น ์ ธ๋‚˜์˜ฌ ๊ฒฝ์šฐ else๋ฌธ ์‹คํ–‰. continue๋Š” break ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ.

ํฌ๋งคํŒ…

a = 3
print(f'{a} ์ž…๋‹ˆ๋‹ค')

inf

๊ฐ€์žฅ ํฐ ์ˆ˜ ํ‘œํ˜„

inf = int(1e9)
print(inf > inf)   #False
print(inf+1 > inf) #True

sys

ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ํ•จ์ˆ˜์ˆ˜

import sys
sys.exit(0)