๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/Python

[python] ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํŒŒ์ด์ฌ ๋ฌธ๋ฒ• ์ •๋ฆฌ

by ๋ญ…์ฆค 2022. 1. 5.
๋ฐ˜์‘ํ˜•

1. deque 

- ์„ ์ž…์„ ์ถœ ํ

from collections import deque

deq = deque()

deq.append(1)
deq.appendleft(2)
deq.pop()
deq.popleft()
  • deque.append(item): item์„ ๋ฐํฌ์˜ ์˜ค๋ฅธ์ชฝ ๋์— ์‚ฝ์ž…
  • deque.appendleft(item): item์„ ๋ฐํฌ์˜ ์™ผ์ชฝ ๋์— ์‚ฝ์ž…
  • deque.pop(): ๋ฐํฌ์˜ ์˜ค๋ฅธ์ชฝ ๋ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์‹œ์— ๋ฐํฌ์—์„œ ์‚ญ์ œํ•œ๋‹ค.
  • deque.popleft(): ๋ฐํฌ์˜ ์™ผ์ชฝ ๋ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์‹œ์— ๋ฐํฌ์—์„œ ์‚ญ์ œํ•œ๋‹ค.
  • deque.remove(item): item์„ ๋ฐํฌ์—์„œ ์ฐพ์•„ ์‚ญ์ œํ•œ๋‹ค.
  • deque.rotate(num): ๋ฐํฌ๋ฅผ num๋งŒํผ ํšŒ์ „ํ•œ๋‹ค(์–‘์ˆ˜๋ฉด ์˜ค๋ฅธ์ชฝ, ์Œ์ˆ˜๋ฉด ์™ผ์ชฝ).

 

2. Counter

from collections import Counter

a =['red', 'blue', 'red', 'green', 'blue', 'blue']
b = [1,2,2,3,3,3,4,4,4,4]

print(Counter(a))			# Counter({'blue': 3, 'red': 2, 'green': 1})
print(Counter(a)['red'])		# 2

print(Counter(b))			# Counter({4: 4, 3: 3, 2: 2, 1: 1})
print(Counter(b)[3])			# 3
  • Counter(item) : list ๋˜๋Š” set์ธ ์ž…๋ ฅ์„ ๋„ฃ์œผ๋ฉด ๊ฐ ํ•ญ๋ชฉ์„ key๋กœ ๊ฐœ์ˆ˜๋ฅผ value๋กœ ๋ฆฌํ„ดํ•ด์ค€๋‹ค
  • Counter.most_common(item) : item ์ˆ˜ ๋งŒํผ์˜ ์ƒ์œ„ ์š”์†Œ๋งŒ ์ถœ๋ ฅ
  • Counter ๋ผ๋ฆฌ ๋ง์…ˆ, ๋บ„์…ˆ ๊ฐ€๋Šฅ
  • &(๊ต์ง‘ํ•ฉ), |(ํ•ฉ์ง‘ํ•ฉ) ์—ฐ์‚ฐ ๊ฐ€๋Šฅ

 

3. heapq

- ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅ

import heapq

heap = []
heapq.heappush(heap, 4)
heapq.heappush(heap, 1)
heapq.heappush(heap, 7)
heapq.heappush(heap, 3)
print(heap)				# [1, 3, 7, 4]

print(heapq.heappop(heap))		# 1
print(heapq.heappop(heap))		# 3
print(heapq.heappop(heap))		# 4
print(heapq.heappop(heap))		# 7
  • heapq.heappush(heap, item) : heap ์— item(์›์†Œ) ์ถ”๊ฐ€
  • heapq.heappop(heap) : heap ์˜ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ์‚ญ์ œ ํ›„ ๋ฆฌํ„ด
  • heapq.heapify(list) : ์ด๋ฏธ ์›์†Œ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ํž™์œผ๋กœ ๋ฐ˜ํ™˜ 

 

4. permutations, combinations 

- ์ˆœ์—ด๊ณผ ์กฐํ•ฉ

from itertools import permutations
from itertools import combinations


arr = ['A', 'B', 'C']
nPr = permutations(arr, 2)
nCr = combinations(arr, 2)

print(list(nPr))		# [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
print(list(nCr))		# [('A', 'B'), ('A', 'C'), ('B', 'C')]
  • permutations(arr,x) : ๋ฆฌ์ŠคํŠธ arr์—์„œ x๊ฐœ๋ฅผ ๊ณจ๋ผ ์ˆœ์—ด์„ ๋ฐ˜ํ™˜ 
  • combinations(arr,x) : ๋ฆฌ์ŠคํŠธ arr์—์„œ x๊ฐœ๋ฅผ ๊ณจ๋ผ ์กฐํ•ฉ์„ ๋ฐ˜ํ™˜

 

5. eval()

a = eval("1+3*5")
b = eval("{'red':3,'blue':4}")
c = eval("[1,2,3]")

print(a,type(a))		# 16 <class 'int'>
print(b,type(b))		# {'red': 3, 'blue': 4} <class 'dict'>
print(c,type(c))		# [1, 2, 3] <class 'list'>

 

6. re.split()

import re

a = '12+3*4-88'
x = re.split('[+*-]',a)
y = re.split('([+*-])',a)

print(x)	# ['12', '3', '4', '88']
print(y)	# ['12', '+', '3', '*', '4', '-', '88']

 

7. ord(), chr()

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

 

8. ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ ์ •๋ ฌ

arr = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]

a = sorted(arr, key=lambda n : n[0])
b = sorted(arr, key=lambda n : n[1])

c = sorted(arr, key=lambda n : (n[0],n[1]))
d = sorted(arr, key=lambda n : (n[0],-n[1]))
e = sorted(arr, key=lambda n : (n[1],n[0]))

print(a)		# [[1, 2], [1, 3], [2, 1], [3, 4], [3, 2]]
print(b)		# [[2, 1], [1, 2], [3, 2], [1, 3], [3, 4]]

print(c)		# [[1, 2], [1, 3], [2, 1], [3, 2], [3, 4]]
print(d)		# [[1, 3], [1, 2], [2, 1], [3, 4], [3, 2]]
print(e)		# [[2, 1], [1, 2], [3, 2], [1, 3], [3, 4]]

lambda ๋ฅผ ์“ฐ๋ฉด arr ์ด ์ˆœํšŒํ•˜๋ฉด์„œ n ์— ํ•˜๋‚˜์”ฉ ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋จ 

  • sorted(arr, key=lambda n : n[0]) : arr์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
  • sorted(arr, key=lambda n : n[1]) : arr์˜ ๋‘ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
  • sorted(arr, key=lambda n : (n[0],n[1])) : arr์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ›„, ๋‘๋ฒˆ ์งธ ๊ฐ’์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
  • sorted(arr, key=lambda n : (n[0],-n[1])) : arr์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ›„, ๋‘๋ฒˆ ์งธ ๊ฐ’์€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
  • sorted(arr, key=lambda n : (n[1],n[0])) : arr์˜ ๋‘ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ›„, ์ฒซ๋ฒˆ ์งธ ๊ฐ’์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

 

9. ๋”•์…”๋„ˆ๋ฆฌ ์ •๋ ฌ

sorted(iterable,key) ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ iterable ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด items() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉ

dic = {
    2: 1,
    3: 4,
    5: 2,
    1: 3,
    4: 1
}
print(dic)		# {2: 1, 3: 4, 5: 2, 1: 3, 4: 1}
print(dic.items())	# dict_items([(2, 1), (3, 4), (5, 2), (1, 3), (4, 1)])

a = sorted(dic.items(), key=lambda n:n[0])	# key ๊ฐ’์œผ๋กœ ์ •๋ ฌ
b = sorted(dic.items(), key=lambda n:n[1])	# value ๊ฐ’์œผ๋กœ ์ •๋ ฌ

print(a)		# [(1, 3), (2, 1), (3, 4), (4, 1), (5, 2)]
print(b)		# [(2, 1), (4, 1), (5, 2), (1, 3), (3, 4)]

 

10. ๋ฆฌ์ŠคํŠธ, ๋ฌธ์ž์—ด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ

str ='abcDEc'
lst = [3,6,3,8,10]

print(str.find('c'))		# 2
print(str.find('f'))		# -1

print(str.index('c'))		# 2
print(lst.index(3))		# 0

print(str[::-1])		# cEDcba
print(lst[::-1])		# [10, 8, 3, 6, 3]

print(str.upper())		# ABCDEC
print(str.lower())		# abcdec

print(str.replace('c','f'))	# abfDEf


print(list(set(str)))					# ['E', 'a', 'b', 'D', 'c']
print(''.join(list(set(str))))				# EabDc
print(sorted(''.join(list(set(str)))))			# ['D', 'E', 'a', 'b', 'c']
print(''.join(sorted(''.join(list(set(str)))))) 	# DEabc

print(list(set(lst)))					# [8, 10, 3, 6]
print(sorted(list(set(lst))))				# [3, 6, 8, 10]

 

โ–ถ ๋ฌธ์ž์—ด

  • str.find(item) : ๋ฌธ์ž์—ด์— x๊ฐ€ ๋ช‡ ๋ฒˆ์งธ index์— ์ฒ˜์Œ ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜ ์—†์œผ๋ฉด -1 ๋ฐ˜ํ™˜\
  • str.upper(), ๋ฌธ์ž์—ด.lower() : ๋ฌธ์ž์—ด ๋Œ€๋ฌธ์žํ™”, ์†Œ๋ฌธ์žํ™”
  • str.replace(x,y) : ๋ฌธ์ž์—ด์—์„œ ๋ชจ๋“  x๋ฅผ ์ฐพ์•„์„œ y๋กœ ๋ณ€๊ฒฝ

โ–ถ ๋ฆฌ์ŠคํŠธ

  • ''.join(list) :  ๋ฆฌ์ŠคํŠธ ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ฌธ์ž์—ด๋“ค์„ ๋ชจ๋‘ ์—ฐ๊ฒฐ

โ–ถ ๋ฌธ์ž์—ด or ๋ฆฌ์ŠคํŠธ

  • x.index(item) : ๋ฌธ์ž์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ์— item์ด ๋ช‡ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์ฒ˜์Œ ์žˆ๋Š”์ง€ ๋ฐ˜ํ™˜
  • x[::-1] : ๋ฌธ์ž์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ ๊ฑฐ๊พธ๋กœ ์ถœ๋ ฅ 
  • list(set(x)) : ๋ฌธ์ž์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฐ’ ์—†์• ๊ณ  ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅ

     * [::-1] : ๋ฆฌ์ŠคํŠธ์—์„œ ํ•˜๋ฉด [1,2,3,4] -> [4,3,2,1] ๋˜๋Š”๋ฐ, [1234] -> [4321] ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ”์„œ ๊ฑฐ๊พธ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ๋‹ค์‹œ ์ •์ˆ˜๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค

 

11. set

set1 = {1,2,3,4}
set2 = {3,4,5,6}
set3 = {3,4,5,6,7,8}

print(set1&set2)			# ๊ต์ง‘ํ•ฉ {3, 4}
print(set1-set2)			# ์ฐจ์ง‘ํ•ฉ {1, 2}
print(set1|set2)			# ํ•ฉ์ง‘ํ•ฉ {1, 2, 3, 4, 5, 6}
print(set1.issubset(set2))		# False
print(set2.issubset(set3))		# True
  • set1 & set2 : set1๊ณผ set2์˜ ๊ต์ง‘ํ•ฉ ๋ฐ˜ํ™˜
  • set1 - set2 : set1์—์„œ set2๋ฅผ ๋บ€ ์ฐจ์ง‘ํ•ฉ ๋ฐ˜ํ™˜
  • set1 | set2 : set1๊ณผ set2์˜ ํ•ฉ์ง‘ํ•ฉ ๋ฐ˜ํ™˜
  • set1.issubset(set2) : set1์ด set2์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์ธ์ง€ ๋ฐ˜ํ™˜

 

12. ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰

s = 'this is string'

print('is' in s)		# True
print(s.find('str'))		# 8
print(s.startswith('this'))	# True
print(s.endswith('string'))	# True
  • 'a' in str : str์— 'a'๊ฐ€ ์žˆ๋Š”์ง€
  • str.startswith(item) : ๋ฌธ์ž์—ด์ด item์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ ์•„๋‹Œ์ง€
  • str.endswith(item) : ๋ฌธ์ž์—ด์ด item์œผ๋กœ ๋๋‚˜๋Š”์ง€ ์•„๋‹Œ์ง€

 

os

os.environ['HOME'] # 'HOME' ๋Œ€์‹ ์— ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ ์ •๋ณด๋“ค์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
os.environ.get('HOME')
os.path.isfile('filename')
os.path.isdir('dirname')

# path๊ฐ€ ์กด์žฌํ•˜๋Š” ์ง€ ํ™•์ธ
os.path.exists(path) 

# ํ˜„์žฌ ๊ฒฝ๋กœ์— folder ์ƒ์„ฑ
os.mkdir(folder_name) 

# ์ง€์ •๋œ path์— folder ์ƒ์„ฑํ•˜๋ฉฐ path์— ํฌํ•จ๋œ branch ๊นŒ์ง€ ์ƒ์„ฑ
# ์˜ˆ๋ฅผ ๋“ค์–ด path๊ฐ€ ./A/B/C ์ด๊ณ  B/C๊ฐ€ ์—†๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ C๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๊นŒ์ง€ ์ค‘๊ฐ„์— ํ•„์š”ํ•œ ํด๋” ๊ณ„์ธต์„ ๋ชจ๋‘ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
# mkdir๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ค‘๊ฐ„์— sub directory ๊นŒ์ง€ ํ•œ๋ฒˆ์— ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
os.makedirs(path) 

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ถœ๋ ฅํ•จ
os.path.abspath(os.getcwd())
# ๊ฒฝ๋กœ ๋ณ€๊ฒฝ
os.chdir(path)

# cmd ๋ช…๋ น์–ด ์ž…๋ ฅ
command = "ls -al"
os.system(command)

# ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๋ณ€๊ฒฝ
os.chdir(path)

# ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์–ป๊ธฐ
os.getcwd()

# ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ ์ง€์šฐ๊ธฐ
os.remove(file_path or path)

# ํŒŒ์ผ์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜
os.path.abspath(file_path)

# ์ฃผ์–ด์ง„ ๊ฒฝ๋กœ์˜ ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
os.path.exists(file_path)

# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ์–ป๊ธฐ
os.curdir()

# ๋ถ€๋ชจ ๋””๋ ‰ํ† ๋ฆฌ ์–ป๊ธฐ
os.pardir()

# ๋””๋ ‰ํ† ๋ฆฌ ๋ถ„๋ฆฌ ๋ฌธ์ž ์–ป๊ธฐ. . windows๋Š” \ linux๋Š” / ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
os.sep() 

# ํŒŒ์ผ๋ช…๋งŒ ์ถ”์ถœ
os.path.basename(file_path)

# ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ ์ถ”์ถœ
os.path.dirname(file_path)

# ๋งˆ์ง€๋ง‰ ๋””๋ ‰ํ† ๋ฆฌ ํด๋”๋ช… ์ถ”์ถœ
path = "folder_A/folder_B/folder_C/folder_D"
os.path.basename(os.path.normpath(path))
# folder_D

# ๊ฒฝ๋กœ์™€ ํŒŒ์ผ๋ช…์„ ๋ถ„๋ฆฌ
os.path.split(file_path)

# ๋“œ๋ผ์ด๋ธŒ๋ช…๊ณผ ๋‚˜๋จธ์ง€ ๋ถ„๋ฆฌ (MS Windows์˜ ๊ฒฝ์šฐ)
os.path.splitdrive(file_path)

# ํ™•์žฅ์ž์™€ ๋‚˜๋จธ์ง€ ๋ถ„๋ฆฌ
os.path.splitext(file_path)

# ํŒŒ์ผ ์‚ฌ์ด์ฆˆ ๊ณ„์‚ฐ
MB = 1024 ** 2
GB = 1024 ** 3
# Mega Byte ๋‹จ์œ„๋กœ ํ‘œํ˜„
os.path.getsize(file_path) // MB
# Giga Byte ๋‹จ์œ„๋กœ ํ‘œํ˜„
os.path.getsize(file_path) // GB
import glob

path = "./*/*.py"
file_list = glob.glob(path)
file_list_py = [file for file in file_list]
# file_list_py = [file for file in file_list if file.endswith(".py")]

print ("file_list_py: {}".format(file_list_py))

 

๋ฐ˜์‘ํ˜•