파이썬 문법 #1

2020. 11. 18. 19:00γ†πŸ“ μ½”λ”© ν…ŒμŠ€νŠΈ/Python

λ°˜μ‘ν˜•

μžλ£Œν˜•

- λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ°μ€ κ²°κ΅­ 데이터λ₯Ό λ‹€λ£¨λŠ” ν–‰μœ„μž…λ‹ˆλ‹€.

- 파이썬의 μžλ£Œν˜•μœΌλ‘œλŠ” μ •μˆ˜ν˜•, μ‹€μˆ˜ν˜•, λ³΅μ†Œμˆ˜ν˜•, λ¬Έμžμ—΄, 리슀트, νŠœν”Œ, 사전 등이 μžˆμŠ΅λ‹ˆλ‹€.

 

μ •μˆ˜ν˜•

- μ •μˆ˜ν˜•(Integer)은 μ •μˆ˜λ₯Ό λ‹€λ£¨λŠ” μžλ£Œν˜•μž…λ‹ˆλ‹€.

# μ–‘μ˜ μ •μˆ˜
a = 1000
print(a) # 1000

# 음의 μ •μˆ˜
a = -7
print(a) # -7

# 0
a = 0
print(a) # 0

 

μ‹€μˆ˜ν˜•

- μ‹€μˆ˜ν˜•(Real Number)λŠ” μ†Œμˆ˜μ  μ•„λž˜μ˜ 데이터λ₯Ό ν¬ν•¨ν•˜λŠ” 수 μžλ£Œν˜•μž…λ‹ˆλ‹€.

# μ–‘μ˜ μ‹€μˆ˜
a = 157.93
print(a) # 157.93

# 음의 μ‹€μˆ˜
a = -1837.2
print(a) # -1837.2

# μ†Œμˆ˜λΆ€κ°€ 0일 λ•Œ 0을 μƒλž΅
a = 5.
print(a) # 5.0

# μ •μˆ˜λΆ€κ°€ 0일 λ•Œ 0을 μƒλž΅
a = -.7
print(a) # -0.7

 

μ§€μˆ˜ ν‘œν˜„ 방식

- νŒŒμ΄μ¬μ—μ„œλŠ” eλ‚˜ Eλ₯Ό μ΄μš©ν•œ μ§€μˆ˜ ν‘œν˜„ 방식을 μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- eλ‚˜ E λ‹€μŒμ— μ˜€λŠ” μˆ˜λŠ” 10의 μ§€μˆ˜λΆ€λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

- 예λ₯Ό λ“€μ–΄ 1e9라고 μž…λ ₯ν•˜κ²Œ 되면, 10의 9제곱이 λ©λ‹ˆλ‹€.

# 1,000,000,000 의 μ§€μˆ˜ ν‘œν˜„ 방식
a = 1e9
print(a) # 1000000000.0

# 752.5
a = 75.25e1
print(a) # 752.5

# 3.954
a = 3954e-3
print(a) # 3.954

 

μ‹€μˆ˜ν˜• 더 μ•Œμ•„λ³΄κΈ°

- 컴퓨터 μ‹œμŠ€ν…œμ€ μ‹€μˆ˜ 정보λ₯Ό ν‘œν˜„ν•˜λŠ” 정확도에 ν•œκ³„λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

a = 0.3 + 0.6
print(a) # 0.899999999999999

if a == 0.9:
	print(True)
else:
	print(False) # False

- 이럴 λ•ŒλŠ” round() ν•¨μˆ˜λ₯Ό μ΄μš©ν•  수 있으며, μ΄λŸ¬ν•œ 방법이 ꢌμž₯λ©λ‹ˆλ‹€.

- 예λ₯Ό λ“€μ–΄ 123.456을 μ†Œμˆ˜ μ…‹μ§Έ μžλ¦¬μ—μ„œ λ°˜μ˜¬λ¦Όν•˜λ €λ©΄ round(123.456, 2)라고 μž‘μ„±ν•©λ‹ˆλ‹€.

   - κ²°κ³ΌλŠ” 123.46이 λ©λ‹ˆλ‹€.

a = 0.3 + 0.6
print(round(a,4)) # 0.9

if round(a, 4) == 0.9:
	print(True)
else:
	print(False) # True

 

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

- 수 μžλ£Œν˜•μ— λŒ€ν•˜μ—¬ 사칙연산과 λ‚˜λ¨Έμ§€ μ—°μ‚°μžκ°€ 맀우 많이 μ‚¬μš©λ©λ‹ˆλ‹€.

- λ‚˜λˆ„κΈ° μ—°μ‚°μž(/)λŠ” λ‚˜λˆ μ§„ κ²°κ³Όλ₯Ό μ‹€μˆ˜ν˜•μœΌλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

- λ‹€μ–‘ν•œ λ‘œμ§μ„ 섀계할 λ•Œ λ‚˜λ¨Έμ§€ μ—°μ‚°μž(%)λ₯Ό μ΄μš©ν•΄μ•Ό ν•  λ•Œκ°€ λ§ŽμŠ΅λ‹ˆλ‹€.

- νŒŒμ΄μ¬μ—μ„œλŠ” λͺ«μ„ μ–»κΈ° μœ„ν•΄ λͺ« μ—°μ‚°μž(//)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

- 이외에도 κ±°λ“­ 제곱 μ—°μ‚°μž(**)λ₯Ό λΉ„λ‘―ν•΄ λ‹€μ–‘ν•œ μ—°μ‚°μžλ“€μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.

a = 7
b = 3

# λ‚˜λˆ„κΈ°
print(a / b) # 2.333333333335

# λ‚˜λ¨Έμ§€
print(a % b) # 1

# λͺ«
print(a // b) # 2
--------------------------------------------------------------------------
a = 5
b = 3

# κ±°λ“­ 제곱
print(a ** b) # 125

# 제곱근
print(a ** 0.5) # 2.23606797749979

 

리슀트 μžλ£Œν˜•

- μ—¬λŸ¬ 개의 데이터λ₯Ό μ—°μ†μ μœΌλ‘œ λ‹΄μ•„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μžλ£Œν˜•μž…λ‹ˆλ‹€.

- 리슀트 λŒ€μ‹ μ— λ°°μ—΄ ν˜Ήμ€ ν…Œμ΄λΈ”μ΄λΌκ³  λΆ€λ₯΄κΈ°λ„ ν•©λ‹ˆλ‹€.

- λ¦¬μŠ€νŠΈλŠ” λŒ€κ΄„ν˜Έ([])μ•ˆμ— μ›μ†Œλ₯Ό λ„£μ–΄ μ΄ˆκΈ°ν™”ν•˜λ©°, 쉼포(,)둜 μ›μ†Œλ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€.

- 리슀트의 μ›μ†Œμ— μ ‘κ·Όν•  λ•ŒλŠ” 인덱슀(Index) 값을 κ΄„ν˜Έμ— λ„£μŠ΅λ‹ˆλ‹€.

- λΉ„μ–΄ μžˆλŠ” 리슀트λ₯Ό μ„ μ–Έν•˜κ³ μž ν•  λ•ŒλŠ” list() ν˜Ήμ€ κ°„λ‹¨νžˆ []λ₯Ό μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# 직접 데이터λ₯Ό λ„£μ–΄ μ΄ˆκΈ°ν™”
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 크기가 N이고, λͺ¨λ“  값이 0인 1차원 리슀트 μ΄ˆκΈ°ν™”
n = 10
a = [0] * n
print(a) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

 

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

- 인덱슀 값을 μž…λ ₯ν•˜μ—¬ 리슀트의 νŠΉμ •ν•œ μ›μ†Œμ— μ ‘κ·Όν•˜λŠ” 것을 인덱싱(Indexing)이라고 ν•©λ‹ˆλ‹€.

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# λ’€μ—μ„œ 첫 번째 μ›μ†Œ 좜λ ₯
print(a[-1]) # 0

# λ’€μ—μ„œ μ„Έ 번째 μ›μ†Œ 좜λ ₯
print(a[-3]) # 7

# λ„€ 번째 μ›μ†Œ κ°’ λ³€κ²½
a[3] = 7
print(a) # [1, 2, 3, 7, 5, 6, 7, 8, 9]

 

- λ¦¬μŠ€νŠΈμ—μ„œ 연속적인 μ·¨λ₯Ό κ°–λŠ” μ›μ†Œλ“€μ„ 가져와야 ν•  λ•ŒλŠ” μŠ¬λΌμ΄μ‹±(Slicing)을 μ΄μš©ν•©λ‹ˆλ‹€.

- λŒ€κ΄„ν˜Έ μ•ˆμ— 콜둠(:)을 λ„£μ–΄μ„œ μ‹œμž‘ μΈλ±μŠ€μ™€ 끝 인덱슀λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

- 끝 μΈλ±μŠ€λŠ” μ‹€μ œ μΈλ±μŠ€λ³΄λ‹€ 1을 더 크게 μ„€μ •ν•©λ‹ˆλ‹€.

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 두 번째 μ›μ†ŒλΆ€ν„° λ„€ 번째 μ›μ†ŒκΉŒμ§€
print(a[1:4]) # [2, 3, 4]

 

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

- 리슀트λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” 방법 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

- λŒ€κ΄„ν˜Έ μ•ˆμ— 쑰건문과 λ°˜λ³΅λ¬Έμ„ μ μš©ν•˜μ—¬ 리슀트λ₯Ό μ΄ˆκΈ°ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# 0λΆ€ν„° 9κΉŒμ§€μ˜ 수λ₯Ό ν¬ν•¨ν•˜λŠ” 리슀트
array = [i for i in range(10)]

print(array) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 0λΆ€ν„° 19κΉŒμ§€μ˜ 수 μ€‘μ—μ„œ ν™€μˆ˜λ§Œ ν¬ν•¨ν•˜λŠ” 리슀트
array = [i for i in range(20) if i % 2 == 1]

print(array) # [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

# 1λΆ€ν„° 9κΉŒμ§€μ˜ μˆ˜λ“€μ˜ 제곱 값을 ν¬ν•¨ν•˜λŠ” 리슀트
array = [i * i for i in range(1, 10)]

print(array) # [1, 4, 9, 16, 25, 36, 49, 81]

 

리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜κ³Ό 일반적인 μ½”λ“œ λΉ„κ΅ν•˜κΈ°

μ½”λ“œ 1: 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜

# 0λΆ€ν„° 19κΉŒμ§€μ˜ 수 μ€‘μ—μ„œ ν™€μˆ˜λ§Œ ν¬ν•¨ν•˜λŠ” 리슀트
array = [i for i in range(20) if i % 2 == 1]

print(array) 

μ½”λ“œ 2: 일반적인 μ½”λ“œ

# 0λΆ€ν„° 19κΉŒμ§€μ˜ 수 μ€‘μ—μ„œ ν™€μˆ˜λ§Œ ν¬ν•¨ν•˜λŠ” 리슀트
array = []
for i in range(20):
	if i % 2 == 1:
    	array.append(i)
  
print(array)

μ‹€ν–‰ κ²°κ³Ό (두 μ½”λ“œ λͺ¨λ‘ 동일): [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

 

- 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜μ€ 2차원 리슀트λ₯Ό μ΄ˆκΈ°ν™”ν•  λ•Œ 효과적으둜 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

- 특히 N X M 크기의 2차원 리슀트λ₯Ό ν•œ λ²ˆμ— μ΄ˆκΈ°ν™” ν•΄μ•Ό ν•  λ•Œ 맀우 μœ μš©ν•©λ‹ˆλ‹€.

 

리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜(쒋은 μ˜ˆμ‹œ)

# N X M 크기의 2차원 리슀트 μ΄ˆκΈ°ν™”
n = 4
m = 3
array = [[0] * m for _ in range(n)]
print(array) # [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

 

리슀트 κ΄€λ ¨ 기타 λ©”μ„œλ“œ

a = [1, 4, 3]
print("기본 리슀트: ", a) # 기본 리슀트: [1, 4, 3]

# λ¦¬μŠ€νŠΈμ— μ›μ†Œ μ‚½μž…
a.append(2)
print("μ‚½μž…: ", a) # μ‚½μž…: [1, 4, 3, 2]

# μ˜€λ¦„μ°¨μˆœ μ •λ ¬
a.sort()
print("μ˜€λ¦„μ°¨μˆœ μ •λ ¬: ", a) # μ˜€λ¦„μ°¨μˆœ μ •λ ¬: [1, 2, 3 , 4]

# λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬
a.sort(reverse = True)
print("λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬: ", a)
-----------------------------------------------------------------------------------
a = [4, 3, 2, 1]

# 리슀트 μ›μ†Œ λ’€μ§‘κΈ°
a.reverse()
print("μ›μ†Œ λ’€μ§‘κΈ°: ", a) # μ›μ†Œ λ’€μ§‘κΈ°: [1, 2, 3, 4]

# νŠΉμ • μΈλ±μŠ€μ— 데이터 μΆ”κ°€
a.insert(2, 3)
print("인덱슀 2에 3 μΆ”κ°€: ", a) # 인덱슀 2에 3 μΆ”κ°€: [1, 2, 3, 3, 4]

# νŠΉμ • 값인 데이터 개수 μ„ΈκΈ°
print("값이 3인 데이터 개수: ", a.count(3)) # 값이 3인 데이터 개수: 2

# νŠΉμ • κ°’ 데이터 μ‚­μ œ
a.remove(1)
print("값이 1인 데이터 μ‚­μ œ: ", a) # 값이 1인 데이터 μ‚­μ œ: [2, 3, 3, 4]

 

λ¦¬μŠ€νŠΈμ—μ„œ νŠΉμ • κ°’μ˜ μ›μ†Œλ₯Ό λͺ¨λ‘ μ œκ±°ν•˜κΈ°

a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}

# remove_list에 ν¬ν•¨λ˜μ§€ μ•Šμ€ κ°’λ§Œμ„ μ €μž₯
result = [i for i in a if i not in revmove_set]
print(result) # [1, 2, 4]
λ°˜μ‘ν˜•