λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ¦„ | μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅/μ½”ν…Œμš© 파이썬 문법 λͺ¨μŒ

[Python] 파이썬 μ½”λ”©ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ κ°œλ… 정리

by KASSID 2023. 1. 4.

λ°©ν•™λ™μ•ˆ μ½”λ”©ν…ŒμŠ€νŠΈ 곡뢀λ₯Ό ν•˜κΈ° μœ„ν•΄μ„œ 두고두고 λ³Ό κ²Έ

νŒŒμ΄μ¬μ— κ΄€λ ¨λœ κ°„λ‹¨ν•œ κ°œλ…λ“€μ„ ν•œ νŽ˜μ΄μ§€μ— μ •λ¦¬ν•΄λ³΄μ•˜λ‹€!

 

μž…λ ₯κ³Ό 좜λ ₯

μž…λ ₯

- input() : μ‚¬μš©μžλ‘œλΆ€ν„° λ¬Έμžμ—΄ ν•œ 쀄을 μž…λ ₯λ°›λŠ”λ‹€.

- map() : λͺ¨λ“  μ›μ†Œμ— μ „λ‹¬ν•œ ν•¨μˆ˜ ν•˜λ‚˜μ”© μ μš©ν•œ 객체 λ°˜ν™˜

 

# νŠœν”Œμ˜ ν˜•νƒœμ˜ κ°μ²΄μ΄λ―€λ‘œ λ‹€μŒκ³Ό 같이 μ–ΈνŒ¨ν‚Ή κ°€λŠ₯
a, b, c = map(int, input().split())
# list둜 λ³€ν™˜ κ°€λŠ₯
data = list(map(int, input().split()))

 

μž…λ ₯λŸ‰μœΌλ‘œ μΈν•œ μˆ˜ν–‰μ‹œκ°„ 초과 였λ₯˜ λ°œμƒμ‹œ

μ‹œμŠ€ν…œ λΌμ΄λΈŒλŸ¬λ¦¬μ— μ •μ˜λœ readline() 이용

import sys
str = sys.stdin.readline().rstrip() # rstrip()으둜 μ€„λ°”κΏˆ μ‚­μ œ
print(str)

 

좜λ ₯

print() 이용, endλ₯Ό μ΄μš©ν•΄ 끝문자 지정가λŠ₯

print("HELLO") # 좜λ ₯ ν›„ μ€„λ°”κΏˆ
print("HELLO",end=" ") #좜λ ₯ ν›„ ν•œ μΉΈ 곡백

μ½”λ“œ μˆ˜ν–‰μ‹œκ°„ μΈ‘μ •

import time
start_time = time.time() # μΈ‘μ • μ‹œμž‘

# ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€μ½”λ“œ

end_time = time.time() # μΈ‘μ • μ’…λ£Œ
print(f"time: {end_time - start_time}") # μˆ˜ν–‰ μ‹œκ°„ 좜λ ₯
# print(f"time: {end_time - start_time:.6f}") # μˆ˜ν–‰ μ‹œκ°„ 좜λ ₯

μ½”ν…Œμ—μ„œ ν†΅μƒμ μœΌλ‘œ 5초 이내에 μˆ˜ν–‰ν•˜λŠ” 것이 μ‹œκ°„λ³΅μž‘λ„ μΈ‘λ©΄μ—μ„œ 효율적인 μ½”λ“œλΌκ³  ν•œλ‹€!


μžλ£Œν˜•

μ •μˆ˜ν˜• μ‹€μˆ˜ν˜• λ³΅μ†Œμˆ˜ν˜• λ¬Έμžμ—΄ 리슀트 νŠœν”Œ λ”•μ…”λ„ˆλ¦¬

 

μ‹€μˆ˜ν˜•

μ‹€μˆ˜ν˜• 주의!
컴퓨터 μ‹œμŠ€ν…œ λ‚΄μ˜ 데이터 μ²˜λ¦¬μ— μ‚¬μš”λ˜λŠ” 것은 2μ§„μˆ˜ μ²΄κ³„λ‘œ, μ‹€μˆ˜λ₯Ό μ •ν™•νžˆ ν‘œν˜„λͺ»ν•¨

round()λ₯Ό μ΄μš©ν•˜κΈ°

a = .3+.6
if round(a, 4) == .9: # round() μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ False
    print(True)
else:
    print(False)
    
>>> True

 

μ§€μˆ˜ν‘œν˜„λ²•

e ν˜Ήμ€ E둜 μ§€μˆ˜λ₯Ό ν‘œν˜„ν•  수 μžˆλ‹€. e뒀에 μ˜€λŠ” μˆ˜λŠ” 10의 μ§€μˆ˜λ₯Ό ν‘œν˜„ν•˜λŠ”λ°

λ§Œμ•½ 1e2 라면 10^2 = 100 이고 2e-2 라면 2*10^-2 = 0.02λ₯Ό μ˜λ―Έν•œλ‹€.

 

수 μžλ£Œν˜• μ—°μ‚°μž

+ - *

/ : λ‚˜λˆˆ κ²°κ³Ό μ‹€μˆ˜ν˜•μœΌλ‘œ λ°˜ν™˜

// : λ‚˜λˆˆ 결과의 λͺ« λ°˜ν™˜

% : λ‚˜λˆˆ 결과의 λ‚˜λ¨Έμ§€ λ°˜ν™˜

** : 멱수λ₯Ό λ°˜ν™˜

 

λ¬Έμžμ—΄

- 인덱싱과 μŠ¬λΌμ΄μ‹±μ΄ κ°€λŠ₯ν•˜λ‹€. κ·ΈλŸ¬λ‚˜ ν•΄λ‹Ή 인덱슀 변경은 λΆˆκ°€

- '+' : λ¬Έμžμ—΄μ΄ μ—°κ²°λœλ‹€.

- '*' : λ¬Έμžμ—΄κ³Ό μ •μˆ˜μ™€ κ³±ν•˜λ©΄ 같은 λ¬Έμžμ—΄ 반볡

λ¬Έμžμ—΄ λ©”μ†Œλ“œ

count, find, index, join, upper, lower, strip(+ l,r), replace, split

",".join("abcd") #a,b,c,d
",".join(['a', 'b', 'c', 'd']) #a,b,c,d

# 리슀트 --> λ¬Έμžμ—΄ λ³€ν™˜
arr = ['a', 'b', 'c', 'd']
result1 = str(arr)
result2 = ''.join(arr)
print(type(result1), result1) # <class 'str'> ['a', 'b', 'c', 'd'] # ν˜•νƒœ κ·ΈλŒ€λ‘œ λ¬Έμžμ—΄λ‘œ
print(type(result2), result2) # <class 'str'> abcd

 

리슀트

- μ—¬λŸ¬κ°œμ˜ 데이터λ₯Ό 닀루기 μœ„ν•œ μžλ£Œν˜•

- ν•˜λ‚˜μ˜ λ¦¬μŠ€νŠΈμ— μ„œλ‘œ λ‹€λ₯Έ μžλ£Œν˜• 데이터 곡쑴가λŠ₯

- μΈλ±μŠ€μ™€ μŠ¬λΌμ΄μ‹± μ΄μš©κ°€λŠ₯

- λ‚΄λΆ€μ˜ 값을 인덱슀λ₯Ό μ΄μš©ν•˜μ—¬ μ ‘κ·Ό ν›„ λ³€κ²½ κ°€λŠ₯

 

리슀트 인덱싱&μŠ¬λΌμ΄μ‹±

arr = [1,2,3,4]

# 인덱싱
arr[0] # 1
arr[-1] # 4

# μŠ¬λΌμ΄μ‹±
arr[1:3] # [2, 3]
arr[1:3:1] # [2, 3] # μœ„μ™€ 같은 κ²°κ³Ό
arr[::2] # [1, 3] # 전체 λŒ€μƒ μ•žλΆ€ν„° 2μΉΈ μ”©
arr[::-1] # [4, 3, 2, 1] # μ—­μˆœμœΌλ‘œ μŠ¬λΌμ΄μ‹±
arr[::-2] # [4, 2]

 

리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜

리슀트 μ΄ˆκΈ°ν™”μ‹œ μ‚¬μš©ν•˜λŠ” 방법

arr = [0 for i in range(0, 4)]
print(arr) # [0, 0, 0, 0]

arr = [i for i in range(10) if i % 2 == 0]
print(arr) # # 0~9사이 짝수

# 2차원 리슀트
n = 3
m = 2
arr = [n * [0] for i in range(m)]

print(arr) # [[0, 0, 0], [0, 0, 0]]

리슀트 λ©”μ†Œλ“œ

append, sort, sort(reverse=True), reverse, insert, count, remove

arr = [1,2,3,4]

arr.append(5);print(arr) 
arr.sort();print(arr) 
arr.sort(reverse=True);print(arr) 
arr.reverse();print(arr) 
arr.insert(10,1);print(arr) # λ²”μœ„ λ„˜μœΌλ©΄ μžλ™μœΌλ‘œ 계산
print(arr.count(1))
arr.remove(1);print(arr) # 쑰건만쑱 μ›μ†Œ 쀑 κ°€μž₯ μ•ž ν•˜λ‚˜ μ‚­μ œ

 

νŠœν”Œ

- ν•œ 번 μ„ μ–Έλœ 값은 λ³€κ²½ λΆˆκ°€

- λ¦¬μŠ€νŠΈμ— λΉ„ν•΄ κ³΅κ°„νš¨μœ¨μ 

- ν™œμš© μ˜ˆμ‹œ

 - μ„œλ‘œ λ‹€λ₯Έ μ„±μ§ˆμ˜ 데이터 λ¬Άμ–΄μ„œ 관리할 λ•Œ
 - μ΅œλ‹¨ 경둜 μ•Œκ³ λ¦¬μ¦˜μ—μ„œ (W, Num) ν˜•νƒœλ‘œ μ‚¬μš©ν•  λ•Œ
 - ν•΄μ‹±ν•  λ•Œ (데이터, ν•΄μ‹± ν‚€)
 - λ¦¬μŠ€νŠΈλ³΄λ‹€ λ©”λͺ¨λ¦¬ 효율적으둜 μ‚¬μš©ν•  λ•Œ

 

λ”•μ…”λ„ˆλ¦¬

- λΉ„μˆœμ°¨μ  μžλ£Œν˜•

- Key와 value의 μŒμ„ λ°μ΄ν„°λ‘œ 가짐

- 'λ³€κ²½ λΆˆκ°€λŠ₯ν•œ μžλ£Œν˜•'을 Key둜 μ‚¬μš© κ°€λŠ₯

- λ‚΄λΆ€μ μœΌλ‘œ ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ΄μš©ν•˜λ―€λ‘œ λ°μ΄ν„°μ˜ '쑰회 및 μˆ˜μ •μ΄ O(1)'의 μ‹œκ°„λ³΅μž‘λ„

# 방법 1
name = '이름'

info = {
  name: 'Kassid',
  'λ‚˜μ΄': 25,
  5 : 25
}
print(info) # {'이름': 'Kassid', 'λ‚˜μ΄': 25, 5: 25}

# 방법 2
info1 = dict()
info1['이름'] = 'Kassid'
info1['λ‚˜μ΄'] = 25

Key λ°μ΄ν„°λ§Œ 뽑기 : keys()

κ°’ λ°μ΄ν„°λ§Œ 뽑기 : values()

 

집합 μžλ£Œν˜•

- 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

- μˆœμ„œκ°€ μ—†λ‹€.

- λ°μ΄ν„°μ˜ '쑰회 및 μˆ˜μ •μ΄ O(1)'의 μ‹œκ°„λ³΅μž‘λ„

data = set([1, 2, 3, 4, 4, 4]) # {1, 2, 3, 4, 5}. 4쀑볡 제거
data = {1, 1, 2, 2, 3, 4, 4, 5, 5 } # {1, 2, 3, 4, 5}

집합 μžλ£Œν˜• μ—°μ‚°μž

a = {1, 2, 3, 4 }
b = {1, 4, 5, 6 }
# ν•©
a | b # {1, 2, 3, 4, 5, 6}

#ꡐ
a & b # {1, 4}

#μ°¨
a - b # {2, 3}

global ν‚€μ›Œλ“œ

- ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ ν•¨μˆ˜ λ°–μ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ

- λ‹¨μˆœ 좜λ ₯or μ°Έμ‘°λŠ” global 없이 μ°Έμ‘° κ°€λŠ₯ν•˜λ‹€.

- list의 λ‚΄λΆ€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄ μ‚¬μš©ν•˜λŠ” 것 λ˜ν•œ 였λ₯˜ λ―Έλ°œμƒ

a = 0
def func():
    global a
    a += 1
    
func();print(a) # a의 κ°’ λ³€κ²½
# 1

b = 10
def func2():
    print(b+20)
func2();print(b) # λ‹¨μˆœ κ°’λ§Œ μ°Έμ‘° # b의 κ°’ λ―Έλ³€κ²½
# 30 10

arr = [1, 2 ,3, 4, 5]
def func3():
    arr.append(10)
func3();print(arr)
# [1, 2, 3, 4, 5, 10]

ν•¨μˆ˜

ν•¨μˆ˜μ˜ λ°˜ν™˜ μ—¬λŸ¬ 개 ν•œλ²ˆμ— κ°€λŠ₯

μ•„λž˜μ™€ 같은 ν˜•νƒœλ‘œ μ—¬λŸ¬ 값을 ν•œ λ²ˆμ— λ°˜ν™˜ν•  수 μžˆλ‹€.

def func(a,b):
	return a+b, a-b, a*b, a/b

A,B,C,D = func(10,3)

 

lambda

λ‹€μŒκ³Ό 같은 κ²½μš°μ— ν™œμš©ν•œλ‹€.

- ν•¨μˆ˜μ˜ κ°„λ‹¨ν•œ μž‘μ„±
- ν•¨μˆ˜κ°€ ν•œλ²ˆλ§Œ 쓰이고 λ§ˆλŠ” 경우 κ°€λŠ₯에 ν•œμ€„λ‘œ ν‘œν˜„ κ°€λŠ₯
- ν•¨μˆ˜ 자체λ₯Ό μž…λ ₯으둜 λ°›λŠ” ν•¨μˆ˜μ—μ„œ μœ μš©ν•¨
print((lambda a, b: a + b)(1, 2)) # 3

list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 각각의 μ›μ†Œλ₯Ό λ”ν•˜κΈ°
result = list(map(lambda a,b: a + b, list1, list2))
# [5, 7, 9]

 



μœ μš©ν•œ 팁

setrecursionlimit μ„€μ •

νŒŒμ΄μ¬μ—μ„œ μž¬κ·€ν™œμš© λ¬Έμ œμ—μ„œ ν•„μˆ˜μ μœΌλ‘œ ν•„μš”ν•œ μ½”λ“œ

μž¬κ·€ 깊이 μ œν•œμ„ λŠ˜λ €μ€€λ‹€.

import sys
sys.setrecursionlimit(10 ** 6)

λŒ“κΈ€