πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[3νŒ€/김경은] 6μ°¨μ‹œ 파이썬 μŠ€ν„°λ”” - λ¬Έμžμ—΄

경은 2023. 5. 2. 01:47

데이터 과학을 μœ„ν•œ 파이썬 ν”„λ‘œκ·Έλž˜λ° κ΅μž¬λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±ν•œ κ°•μ˜μžλ£Œμž…λ‹ˆλ‹€.

6μ°¨μ‹œ_λ¬Έμžμ—΄_κ°•μ˜μ•ˆ.pdf
1.06MB
6μ°¨μ‹œ_λ¬Έμžμ—΄_과제.pdf
1.04MB

λ¬Έμžμ—΄μ˜ κ°œλ…

  • λ¬Έμžμ—΄μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€κ±°λ‚˜ 데이터λ₯Ό 뢄석할 λ•Œ 맀우 μ€‘μš”ν•˜κ²Œ λ‹€λ£¨μ–΄μ§€λŠ” μžλ£Œν˜• 쀑 ν•˜λ‚˜μ΄λ‹€.
  • λ¬Έμžμ—΄μ€ μ‹œν€€μŠ€ μžλ£Œν˜•μ΄λ‹€.
  • μ‹œν€€μŠ€ μžλ£Œν˜• : λ¦¬μŠ€νŠΈμ™€ 같이 데이터λ₯Ό 순차적으둜 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜λŠ” ν˜•μ‹μ˜ 데이터

μ‹œν€€μŠ€ μžλ£Œν˜•

λ¬Έμžμ—΄κ³Ό λ©”λͺ¨λ¦¬ 곡간

  • λ¬Έμžμ—΄μ„ μ €μž₯ν•˜κΈ° μœ„ν•΄ 영문자 ν•œ κΈ€μžλ‹Ή 1λ°”μ΄νŠΈμ˜ λ©”λͺ¨λ¦¬ 곡간을 μ‚¬μš©
  • μ»΄ν“¨ν„°λŠ” μ΄μ§„μˆ˜λ§Œ μ‚¬μš©ν•˜λ―€λ‘œ 컴퓨터가 숫자λ₯Ό μΈμ‹ν•˜λŠ” μ΅œμ†Œ λ‹¨μœ„λŠ” 1λΉ„νŠΈ(bit)
  • 1λΉ„νŠΈλŠ” 0κ³Ό 1λ§Œμ„ ν‘œν˜„ν•  수 μžˆλŠ” 크기
  • 1 λ°”μ΄νŠΈ (byte) = 8λΉ„νŠΈ , 2의 8승 크기인 256κΉŒμ§€ 숫자 μ €μž₯ κ°€λŠ₯
>>> import sys      #sys λͺ¨λ“ˆμ„ 호좜
>>> print(sys.getsizeof("a"), sys.getsizeof("ab"), sys.getsizeof("abc"))
50 51 52            #"a", "ab", "abc" 각각의 λ©”λͺ¨λ¦¬ 크기 좜λ ₯
  • sys.getsizeofλŠ” νŠΉμ • λ³€μˆ˜(λ˜λŠ” κ°’)의 λ©”λͺ¨λ¦¬ 곡간을 μΈ‘μ •ν•˜λŠ” ν•¨μˆ˜λ‘œ, a, ab. abc의 λ©”λͺ¨λ¦¬ 크기가 각각 50, 51. 52둜 1μ”© μ¦κ°€ν•˜λŠ” 것을 μ•Œ 수 있음
  • μœ„ μ½”λ“œμ˜ κ²°κ³ΌλŠ” μ»΄ν“¨ν„°λ§ˆλ‹€ λ‹€λ₯Ό 수 μžˆλ‹€. μ—¬κΈ°μ„œ 50μ΄λΌλŠ” μˆ«μžλŠ” 50λ°”μ΄νŠΈλ₯Ό λœ»ν•¨
  • ν•˜λ‚˜μ˜ 문자λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ μ €μž₯λ˜λŠ” 문자 자체λ₯Ό μ œμ™Έν•˜κ³ λ„ κ·Έ λ³€μˆ˜μ™€ κ΄€λ ¨λœ μ—¬λŸ¬ 가지 정보, 즉 λ³€μˆ˜μ˜ μ €μž₯ μœ„μΉ˜ 등을 μœ„ν•΄ 49λ°”μ΄νŠΈκ°€ ν•„μš”ν•œ 것

컴퓨터가 1λ°”μ΄νŠΈλ‘œ 문자λ₯Ό μ €μž₯ν•  수 μžˆλŠ” μ΄μœ μ™€ ν…μŠ€νŠΈ μ €μž₯ 방법

  • μ»΄ν“¨ν„°λŠ” 문자λ₯Ό 직접 μΈμ‹ν•˜μ§€ μ•ŠλŠ”λ‹€. 컴퓨터에 a라고 μ•Œλ €μ€˜λ„ μ»΄ν“¨ν„°λŠ” μ •ν™•νžˆ 2λΌλŠ” ν…μŠ€νŠΈλ‘œ μΈμ‹ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ»΄ν“¨ν„°λŠ” 이 정보λ₯Ό μ΄μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬ μ €μž₯
  • λ¬Έμžκ°€ 1λ°”μ΄νŠΈλΌκ³  ν•˜μ˜€μœΌλ‹ˆ. 2의 8승의 곡간에 λ¬Έμžμ— λŒ€ν•œ 정보λ₯Ό μ €μž₯ν•˜λŠ” 것
  • 예λ₯Ό λ“€μ–΄, aλ₯Ό μ €μž₯ν•œλ‹€κ³  ν•˜λ©΄ 01001011 처럼 λ³€ν™˜λ˜μ–΄ λ©”λͺ¨λ¦¬μ— μ €μž₯λœλ‹€. 우리 λˆˆμ—λŠ” 2라고 λ³΄μ΄μ§€λ§Œ 컴퓨터 λ©”λͺ¨λ¦¬μ™€ CPUμ—λŠ” 01001011κ³Ό 같은 μˆ«μžλ“€μ΄ 처리되고 있음

μ΄μ§„μˆ˜λ‘œ λ³€ν™˜λ˜λŠ” ν‘œμ€€κ·œμΉ™

  • ν‘œμ€€ κ·œμΉ™μ€ 언어별, λ‚˜λΌλ³„λ‘œ 맀우 λ§Žμ€λ° λŒ€ν‘œμ μΈ κ·œμΉ™μœΌλ‘œ A SCIl Anercan standard code for Information Interchange κ°€ 있고, μœˆλ„μ—μ„œ ν•œκΈ€ 처리λ₯Ό μœ„ν•΄ 많이 μ“°λŠ” CP949 λ˜λŠ”MS949, UTF-3 등이 있음
  • μ΄λŸ¬ν•œ κ·œμΉ™μ„ 인코딩 cncoding 이라고 함

β‘  μ»΄ν“¨ν„°λŠ” 문자λ₯Ό 직접 μΈμ‹ν•˜μ§€ λͺ»ν•œλ‹€.

β‘‘ μ»΄ν“¨ν„°λŠ” 문자λ₯Ό 숫자둜 λ³€ν™˜ν•˜μ—¬ μΈμ‹ν•œλ‹€.

β‘’ μ‚¬λžŒλ“€μ€ 문자λ₯Ό 숫자둜 λ³€ν™˜ν•˜κΈ° μœ„ν•œ κ·œμΉ™μ„ λ§Œλ“€μ—ˆλ‹€.

β‘£ 일반적으둜 이 κ·œμΉ™μ€ 1개의 영문자λ₯Ό 1λ°”μ΄νŠΈ. 즉 2의 8승 μ •λ„μ˜ 곡간에 μ €μž₯ν•œλ‹€.

  • μ΄λŸ¬ν•œ κ·œμΉ™μ„ μ΄μš©ν•˜μ—¬ μˆ«μžμ™€ 문자λ₯Ό λ§΅ν•‘ν•˜λŠ” 것이 λ°”λ‘œ μš΄μ˜μ²΄μ œμ™€ μΈν„°ν”„λ¦¬ν„°μ˜ μ—­ν•  쀑 ν•˜λ‚˜

λ¬Έμžμ—΄μ˜ 인덱싱

  • 리슀트처럼 κΈ€μž ν•˜λ‚˜ν•˜λ‚˜κ°€ μƒλŒ€μ μΈ μ£Όμ†Œλ₯Ό κ°€μ§€λŠ”λ°, 이 μ£Όμ†Œλ₯Ό μ΄μš©ν•΄ μ €μž₯된 값을 κ°€μ Έμ˜€λŠ” 인덱싱이 κ°€λŠ₯

μ‹€μ œμ½”λ“œ

>>> a = "abcde"
>>> print(a[0], a[4])
a e
>>> print(a[-1], a[-5])
e a

a[0] → a의 0번째 κ°’μœΌλ‘œ a 좜λ ₯

a[4] → a의 4번째 κ°’μœΌλ‘œ e 좜λ ₯

  • μ—­μˆœ 인덱싱
  • 였λ₯Έμͺ½λΆ€ν„° -1둜 μ‹œμž‘ν•˜μ—¬ -5κΉŒμ§€ μ£Όμ†Œκ°€ 변함

λ¬Έμžμ—΄μ˜ μŠ¬λΌμ΄μ‹±

  • μŠ¬λΌμ΄μ‹±μ€ λ¬Έμžμ—΄μ˜ μ£Όμ†Œκ°’μ„ μ΄μš©ν•΄ λ¬Έμžμ—΄μ˜ 뢀뢄값을 μΆ”μΆœν•΄λ‚΄λŠ” 기법
>>> a = "TEAMLAB MOOC, AWESOME Python"
>>> print (a[0:6], "AND", a[-9:1])     #a λ³€μˆ˜μ˜ 0λΆ€ν„° 5κΉŒμ§€, -9λΆ€ν„° λκΉŒμ§€
TEAMLA AND ME Python
>>> print(a[:])                        #a λ³€μˆ˜μ˜ μ²˜μŒλΆ€ν„° λκΉŒμ§€
TEAMLAB MOOC, AWESOME Python
>>> print (a[-50:50])                  #λ²”μœ„λ₯Ό λ„˜μ–΄κ°ˆ 경우 μžλ™μœΌλ‘œ μ΅œλŒ€ λ³Œμœ„λ₯Ό 지정
TEAMLAB MOOC, AWESOME Python
>>> print(a[::2], "AND", a[::-11)
TALBMO,AEOEPto AND nohtyP EMOSEWA ,COOM BALMAET
  • a[0:6] → 0번째 μΈλ±μŠ€λΆ€ν„° 5번째 μΈλ±μŠ€κΉŒμ§€
  • a[-9:] → -9번째 μΈλ±μŠ€λΆ€ν„° λκΉŒμ§€
  • a[::2] → μ²˜μŒλΆ€ν„° λκΉŒμ§€ 두 κΈ€μžμ”© λ„μ–΄μ„œ 좜λ ₯
  • a[::-1] → κΈ€μžμ˜ μ—­μˆœμœΌλ‘œ 좜λ ₯

λ¬Έμžμ—΄ μŠ¬λΌμ΄μ‹± 기법은 리슀트 μŠ¬λΌμ΄μ‹±κ³Ό μ‚¬μš©λ²•μ΄ μ™„μ „νžˆ κ°™μŒ

πŸ’‘ λ³€μˆ˜[μ‹œμž‘ 인덱슀:μ’…λ£Œ 인덱슀:증가값]

 

λ¬Έμžμ—΄μ˜ μ—°μ‚°

  • λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 연산이 κ°€λŠ₯ν•˜κ³  λ¬Έμžμ—΄μ˜ 연산은 리슀트 μ—°μ‚°κ³Ό κ°™μŒ
>>> a = "TEAM"
>>> b = "LAB"
>>> print(a + " " + b)                   # λ§μ…ˆμœΌλ‘œ a와 b λ³€μˆ˜ μ—°κ²°ν•˜κΈ°
TEAM LAB
>>> print(a * 2 + " " + b * 2)           # κ³±ν•˜κΈ°λ‘œ 반볡 μ—°μ‚° κ°€λŠ₯
TEAMTEAM LABLAB
>>> if 'A' in a: print(a)                # 'A'κ°€ a에 ν¬ν•¨λ˜μ—ˆλŠ”μ§€ 확인
        else: print (b)

TEAM
  • λ§μ…ˆ 연산은 λͺ¨λ“  λ³€μˆ˜κ°€ λ¬Έμžμ—΄μΌ 경우 ν…μŠ€νŠΈ 뢙이기가 이루어짐
  • a * 2 → a+a 의 μ—°μ‚°μœΌλ‘œ 같은 κΈ€μžκ°€ λ‘λ²ˆ 좜λ ₯됨
  • in μ—°μ‚° → if λ¬Έκ³Ό ν”νžˆ μ‚¬μš©ν•˜μ—¬ νŠΉμ • λ¬Έμžκ°€ νŠΉμ • λ³€μˆ˜μ— λ“€μ–΄μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” μ—°μ‚°

print() ν•¨μˆ˜μ—μ„œ μ •μˆ˜ν˜•κ³Ό λ¬Έμžμ—΄μ„ 같이 보여주렀고 ν• λ•Œ ν•˜λŠ” μ‹€μˆ˜

>>> int_value = 2
>>> print("κ²°κ³ΌλŠ”"+int_value)

λ¬Έμžμ—΄ ν•¨μˆ˜

πŸ’‘ λ³€μˆ˜.ν•¨μˆ˜λͺ…

>>> title = "TEAMLAB X Inflearn"
>>> title.upper ()                  # title λ³€μˆ˜λ₯Ό λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ λ³€ν™˜
'TEAMLAB X INFLEARN'
>>> title.lower ()                  # title λ³€μˆ˜λ₯Ό λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ λ³€ν™˜
'teamlab x inflearn'
  • upper () ν•¨μˆ˜
  • λ¬Έμžμ—΄μ„ λŒ€λ¬Έμžλ‘œ λ³€ν™˜
  • lower() ν•¨μˆ˜
  • λ¬Έμžμ—΄μ„ μ†Œλ¬Έμžλ‘œ λ³€ν™˜
>>> title = "TEAMLAB X Inflearn"
>>> title.title()                   # title λ³€μˆ˜μ˜ 각 λ‹¨μ–΄μ˜ μ•žκΈ€μžλ§Œ λŒ€λ¬Έμžλ‘œ λ³€ν™˜
'Teamlab X Inflearn'
>>> title.capitalize ()             # title λ³€μˆ˜μ˜ 첫 번째 κΈ€μžλ§Œ λŒ€λ¬Έμžλ‘œ λ³€ν™˜
'Teamlab x inflearn'
  • title () ν•¨μˆ˜
  • 각 λ‹¨μ–΄μ˜ μ•žκΈ€μžλ§Œ λŒ€λ¬Έμžλ‘œ λ°”κΎΈλŠ” ν•¨μˆ˜
  • capitalize() ν•¨μˆ˜
  • 첫 번째 κΈ€μžλ§Œ λŒ€λ¬Έμžλ‘œ λ°”κΎΈλŠ” ν•¨μˆ˜
>>> title = "TEAMLAB X Inflearn"
>>> title.count ("a")        # title λ³€μˆ˜μ— 'a'κ°€ λͺ‡ 개 μžˆλŠ”μ§€ 개수 λ°˜ν™˜
1
>>> title.upper().count("a") # title λ³€μˆ˜λ₯Ό λŒ€λ¬Έμžλ‘œ λ§Œλ“  ν›„, 'a'κ°€ λͺ‡ 개 μžˆλŠ”μ§€ 개수 λ°˜ν™˜
0
>>> title.isdigit()          # title λ³€μˆ˜μ˜ λ¬Έμžμ—΄μ΄ μˆ«μžμΈμ§€ μ—¬λΆ€ λ°˜ν™˜
False
»> title.startswith("a")     # title λ³€μˆ˜κ°€ 'a'둜 μ‹œμž‘ν•˜λŠ”μ§€ μ—¬λΆ€ λ°˜ν™˜
False

split() ν•¨μˆ˜

νŠΉμ • 값을 κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄μ„ λΆ„λ¦¬ν•˜μ—¬ 리슀트 ν˜•νƒœλ‘œ λ³€ν™˜

>>> items = 'zero one two three'.split()  # λΉˆμΉΈμ„ κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄ λΆ„λ¦¬ν•˜κΈ°
>>> print (items)
['zero', 'one', 'two', 'three']
  • λ¬Έμžμ—΄ zero one two three'λ₯Ό split( ) ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¦¬μŠ€νŠΈν˜•μ˜ λ³€μˆ˜λ‘œ λ³€ν™˜ν•œλ‹€.
  • split( ) ν•¨μˆ˜ μ•ˆμ— λ§€κ°œλ³€μˆ˜λ‘œ 아무것도 μž…λ ₯ν•˜μ§€ μ•ŠμœΌλ©΄ λΉˆμΉΈμ„ κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄μ„ λΆ„λ¦¬ν•˜λΌλŠ” λœ»μ΄λ‹€. split() ν•¨μˆ˜λŠ” ν…μŠ€νŠΈλ₯Ό 리슀트 ν˜•νƒœλ‘œ κ°„λ‹¨νžˆ λ‚˜λˆ„μ–΄ 뢄리할 수 μžˆλ‹€λŠ” μ μ—μ„œ 널리 μ‚¬μš©λ˜κ³  μžˆλ‹€.

split( ) ν•¨μˆ˜μ— λ§€κ°œλ³€μˆ˜λ₯Ό λ„£μ–΄ ν…μŠ€νŠΈλ₯Ό λΆ„λ¦¬ν•˜λŠ” 방법

>>> example = 'python,jquery ‚javascript'   #","λ₯Ό κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄ λ‚˜λˆ„κΈ°
>>> example.split(",")
['python', 'jquery', 'javascript']
>>> a, b, c = example.split(",")  # λ¦¬μŠ€νŠΈμ— μžˆλŠ” 각 값을 a, b, c λ³€μˆ˜λ‘œ μ–ΈνŒ¨ν‚Ή
>>> print(a, b, c)
python jquery javascript
>>> example = 'theteamlab.univ.edu'
>>> subdomain, domain, tld = example.split('.') 
#""을 κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄ λ‚˜λˆ„κΈ° - μ–ΈνŒ¨ν‚Ή
>>> print (subdomain, domain, tld) 
theteamlab univ edu
  • λ¬Έμžμ—΄μ΄ 콀마(,)λ₯Ό κΈ°μ€€μœΌλ‘œ λ¬Άμ—¬μžˆλ‹€. split(",")λ₯Ό μ‚¬μš©ν•˜λ©΄ 콀마λ₯Ό κΈ°μ€€μœΌλ‘œ λ¬Έμžμ—΄μ„ 뢄리할 수 μžˆλ‹€.
  • split(".")을 μ‚¬μš©ν•˜λ©΄ 점(.)을 κΈ°μ€€μœΌλ‘œ λΆ„λ¦¬ν•œλ‹€. λ˜ν•œ, split() ν•¨μˆ˜λŠ” a, b, c = example.split(",")와 같이 결과값을 λ°”λ‘œ μ–ΈνŒ¨ν‚Ήν•˜μ—¬ μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€.
  • theteamlab.univ.edu와 같은 도메인 λ„€μž„μ„ μ˜λ―Έλ³„λ‘œ 뢄리할 λ•Œλ„ split( ) ν•¨μˆ˜λ₯Ό μ΄μš©ν•œλ‹€.

join() ν•¨μˆ˜

λ¬Έμžμ—΄λ‘œ κ΅¬μ„±λœ 리슀트λ₯Ό 합쳐 ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ λ§Œλ“€ λ•Œ μ‚¬μš©ν•œλ‹€.

join() ν•¨μˆ˜λŠ” κ΅¬λΆ„μž.join(λ¦¬μŠ€νŠΈν˜•) ν˜•νƒœ

>>> colors = ['red', 'blue', 'green', 'yellow']
>>> result = ''.join (colors)
>>> result
'redbluegreenyellow'
  • colors λ³€μˆ˜μ— join() ν•¨μˆ˜λ₯Ό μ μš©ν•˜λ©΄ 각각의 색이름이 ν•˜λ‚˜μ˜ λ¬Έμžμ—΄ κ°’μœΌλ‘œ λ°˜ν™˜λœλ‹€.
  • λ§Œμ•½ 색이름 사이에 λ‹€μ–‘ν•œ κ΅¬λΆ„μžλ₯Ό λ„£κ³  μ‹Άλ‹€λ©΄ join() ν•¨μˆ˜ μ•žμ— ‘·'λ‚˜'-' 등을 μΆ”κ°€ν•˜λ©΄ λœλ‹€.

λ‹€μ–‘ν•œ κ΅¬λΆ„μžλ₯Ό μ‚½μž…ν•œ 예

>>> result = ''.join (colors)           # μ—°κ²° μ‹œ, 1칸을 띄고 μ—°κ²°
>>> result
'red blue green yellow'
>>> result = ','.join (colors)          # μ—°κ²° μ‹œ ", "둜 μ—°κ²°
>>> result
'red, blue, green, yellow'
>>> result = '-'.join (colors)          # μ—°κ²° μ‹œ "-"둜 μ—°κ²°
>>> result
'red-blue-green-yellow'

λ¬Έμžμ—΄ ν‘œν˜„κ³Ό 특수문자

  • λ¬Έμžμ—΄λ‘œ ν‘œν˜„ν•˜κΈ° μ–΄λ €μš΄ 경우

μ€„λ°”κΏˆ

It's Ok.
I'm Happy.
See you.

λ¬Έμžμ—΄ μžμ²΄μ— μž‘μ€λ”°μ˜΄ν‘œλ‚˜ ν°λ”°μ˜΄ν‘œκ°€ λ“€μ–΄κ°€ μžˆλŠ” 경우

a = "It's Ok."
  • μž‘μ€ λ”°μ˜΄ν‘œκ°€ λ“€μ–΄κ°„ λ¬Έμžμ—΄μ€ ν°λ”°μ˜΄ν‘œλ‘œ μ„ μ–Έν•˜κ³ , ν°λ”°μ˜΄ν‘œκ°€ λ“€μ–΄κ°„ λ¬Έμžμ—΄μ€ μž‘μ€λ”°μ˜΄ν‘œλ‘œ μ„ μ–Έ

파이썬 특수문자 κΈ°λŠ₯

  • μ•„ν¬μŠ€νŠΈλ‘œν”Ό(’) 문자 μ‚¬μš©
a = 'It\\'s Ok.'
  • 두 쀄 μ΄μƒμ˜ ν‘œν˜„
a = """
It's Ok.
I'm Happy.
See you. """

λ¬Έμžμ—΄ μ„œμ‹ 지정

  • μ„œμ‹ 지정은 print () ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜•μ‹μ„ ν†΅μΌν•˜μ—¬ λ¬Έμžμ—΄μ„ 좜λ ₯ν•  λ•Œ 유용
  • μ„œμ‹ μ§€μ •μ˜ κ°œλ…
    • print() ν•¨μˆ˜λŠ” 기본적으둜 λ³€μˆ˜ λ˜λŠ” 값을 콀마(,)둜 띄어쓰기 ν•˜μ—¬ 좜λ ₯ν•˜μ§€λ§Œ print() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ‹€ 보면 νŠΉμ •ν•œ ν˜•μ‹μ— λ§žμΆ”μ–΄ κ²°κ³Όλ₯Ό 좜λ ₯ν•΄μ•Ό ν•˜λŠ” κ²½μš°λ„ λ°œμƒν•œλ‹€.
    • 특히 엑셀을 μ‚¬μš©ν•  λ•Œ 톡화 λ‹¨μœ„, μ„Έ 자리 숫자 λ‹¨μœ„λ‘œ 띄어쓰기, % 좜λ ₯ λ“± λ‹€μ–‘ν•œ ν˜•μ‹μ— λ§žμΆ”μ–΄ 좜λ ₯ν•  일이 μƒκΈ°λŠ”λ°, 이λ₯Ό μ„œμ‹ 지정 (formating) 이라고 ν•œλ‹€.
  • % μ„œμ‹κ³Ό format() ν•¨μˆ˜
    • λ¬Έμžμ—΄μ˜ μ„œμ‹μ„ μ„€μ •ν•  λ•Œ print() ν•¨μˆ˜λŠ” 기본적인 좜λ ₯ 외에 %μ„œμ‹κ³Ό format() ν•¨μˆ˜λ₯Ό ꡬ문으둜 μ‚¬μš©ν•˜μ—¬ 좜λ ₯ 양식 지정 κ°€λŠ₯
    print(1, 2, 3)
    print("a" + "" + "b" + "" + "c")
    print("%d %d %d" % (1, 2, 3))
    print("{} {} {}".format("a", "b", "c"))
    
    #좜λ ₯ κ²°κ³Ό
    
    1 2 3
    a b c
    1 2 3
    a b c
    
    1. 1~2행은 λ³„λ„μ˜ μ„œμ‹ 지정 없이 κ·ΈλŒ€λ‘œ print() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ˜€κ³ . 3~4행은 % μ„œμ‹ 지정 κ³Ό format() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€.
    2. 3~4ν–‰κ³Ό 같은 ꡬ문을 사 μš©ν•  경우 뒀에 μžˆλŠ” μˆ«μžμ™€ λ¬Έμžλ“€μ΄ μ•žμ˜ μ„œμ‹ 지정 μ½”λ“œμ— λŒ€μ‘λ˜μ–΄ ν• λ‹Ήλœλ‹€. 즉, 3ν–‰μ˜ "%d %d %d % (1, 2, 3)μ—μ„œ 1, 2, 3이 각각 첫 %dλΆ€ν„° μ°¨λ‘€λ‘œ λŒ€μ‘λ˜μ–΄ ν• λ‹Ήλœλ‹€.
    3. 4ν–‰μ—μ„œλ„ "{} {} {}".format("a", "b", “c")μ—μ„œ 아무것도 μ ν˜€μžˆμ§€ μ•Šμ€ {} 곡간에 "a”, "b” "c"λΌλŠ” λ¬Έμžμ—΄ ν˜•νƒœμ˜ κ°’ 3κ°œκ°€ 각각 λŒ€μ‘λ˜μ–΄ 좜λ ₯λœλ‹€.
    이런 μ‹μœΌλ‘œ μ„œμ‹μ„ μ§€μ •ν•˜μ—¬ 좜λ ₯ν•˜λŠ” μž₯점
    1. 데이터와 좜λ ₯ ν˜•μ‹μ„ λΆ„λ₯˜ ν•  수 μžˆλ‹€. 같은 λ‚΄μš©μ„ μ—¬λŸ¬ 번 λ°˜λ³΅ν•˜κΈ° μœ„ν•΄ κΈ°μ‘΄ print() 문에 μŠ€νŽ˜μ΄μŠ€λ°”λ₯Ό μ΄μš©ν•΄ 띄어쓰기λ₯Ό λ„£μ–΄ + 기호둜 λ¬Έμžμ—΄ ν˜•νƒœλ₯Ό λΆ™μ—¬μ£ΌλŠ” 것보닀 μ‹œκ°μ μœΌλ‘œ 훨씬 μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μ½”λ“œλ₯Ό μž‘μ„± κ°€λŠ₯ν•˜λ‹€.
    2. 데이터λ₯Ό ν˜•μ‹μ— 따라 λ‹€λ₯΄κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€. μ•„λž˜ μ½”λ“œλ₯Ό 보면 λ¬Έμžμ—΄ ν˜•νƒœμΈ (’one’, ‘two’) ꡬ문과 μ •μˆ˜ν˜•μΈ (1, 2) ꡬ문이 각각 %s와 %d둜 λ‹€λ₯΄κ²Œ μ§€μ •λ˜μ–΄ μžˆλ‹€. μ„œμ‹ 지정 κΈ°λŠ₯은 각 λ³€μˆ˜μ˜ μžλ£Œν˜•μ— 맞게 μ„œλ‘œ λ‹€λ₯΄κ²Œ 지정할 수 μžˆλ‹€.
    print('%s %s' %('one','two'))
    print('%d %d'%(1,2))
    
    #좜λ ₯ κ²°κ³Ό
    
    one two
    1 2
    
    • % μ„œμ‹
    πŸ’‘ ‘%μžλ£Œν˜•%(κ°’)’
    print("I eat %d apples."%3)
    print("I eat %s apples."%"five")
    
    #μ‹€ν–‰ κ²°κ³Ό
    
    I eat 3 apples.
    I eat five apples.
    
    • %d
    • μ •μˆ˜ν˜•μ˜ λ³€μˆ˜λ₯Ό ν• λ‹Ή
    • %s
    • λ¬Έμžμ—΄μ˜ λ³€μˆ˜λ₯Ό ν• λ‹Ή
    λ³€μˆ˜μ˜ μžλ£Œν˜•μ— λ”°λ₯Έ μ„œμ‹μ„œμ‹ μ„€λͺ…
    %s λ¬Έμžμ—΄(string)
    %c 문자 1개 (character)
    %d μ •μˆ˜ (integer)
    %f μ‹€μˆ˜ (floating-point)
    %o 8μ§„μˆ˜
    %x 16μ§„μˆ˜
    %% 문자 % 자체
    %에 1개 μ΄μƒμ˜ 값도 ν• λ‹Ή κ°€λŠ₯
>>> print("Product: %, Price per unit: %f."% ("Apple", 5.243))
Product: Apple, Price per unit: 5.243000.

λ³€μˆ˜λͺ…을 λ„£μ–΄μ„œλ„ μ‹€ν–‰ κ°€λŠ₯

number = 3
day = "three"
print("I ate % apples. I was sick for % days." % (number, day))
#μ‹€ν–‰ κ²°κ³Ό

I ate 3 apples. I was sick for three days.
  • 3κ³Ό three κ°€ 각각 첫번째 자리 %d와 두 번째 자리 %s에 듀어감

format() ν•¨μˆ˜

%μ„œμ‹κ³Ό μ‚¬μš©λ²•μ΄ 거의 κ°™μ§€λ§Œ λ¬Έμžμ—΄ ν˜•νƒœμ˜ 인수λ₯Ό μ‚¬μš©ν•œλ‹€λŠ” 차이점이 있음

πŸ’‘ “{μžλ£Œν˜•}”.format(인수)

>>> print("I'm {0} years old.".format(20))
I'm 20 years old.
  • 숫자 20이 {0}에 ν• λ‹Ήλ˜μ–΄ 좜λ ₯
  • κΈ°μ‘΄ % μ„œμ‹κ³Ό λΉ„κ΅ν•˜μ—¬ μžλ£Œν˜•μ„ λ°”λ‘œ 지정해주지 μ•Šκ³  μˆœμ„œλŒ€λ‘œ λ³€μˆ˜κ°€ ν• λ‹Ή
age = 40; name = 'Sungchul Choi'
print("I'm {0} years old.". format (age))
print ("My name is {0} and (1} years old.". format (name, age))
print("Product: {0}, Price per unit: {1:.2f}.".format ("Apple", 5.243))
#좜λ ₯ κ²°κ³Ό

I'm 40 years old.
My name is Sungchul Choi and 40 years old.
Product: Apple, Price per unit: 5.24.
  • % μ„œμ‹μ²˜λŸΌ λ³€μˆ˜μ˜ 이름을 μ‚¬μš©ν•˜κ±°λ‚˜ λ³€μˆ˜μ˜ μžλ£Œν˜•μ„ λ”°λ‘œ μ§€μ •ν•˜μ—¬ 좜λ ₯
  • Price per unit: {1:.2f}μ—μ„œ κΈ°μ‘΄ format() ν•¨μˆ˜μ™€ λ‹€λ₯΄κ²Œ .2f λΌλŠ” ꡬ문이 μΆ”κ°€λ˜μ—ˆλ‹€. 이 μ½”λ“œλŠ” % μ„œμ‹μ—μ„œ μ‹€μˆ˜ν˜•μ„ ν‘œν˜„ν•˜λŠ” 기법과 κ°™μœΌλ©° .2λŠ” μ†Œμˆ˜μ  λ‘˜μ§Έ μžλ¦¬κΉŒμ§€ 좜λ ₯ν•˜λΌλŠ” 뜻

νŒ¨λ”©

  • 파이썬 μ„œμ‹ 지정 κΈ°λŠ₯μ—λŠ” μ—¬μœ  곡간을 μ§€μ •ν•˜μ—¬ κΈ€μž 배열을 λ§žμΆ”κ³  μ†Œμˆ˜μ  자릿수λ₯Ό λ§žμΆ”λŠ” νŒ¨λ”© κΈ°λŠ₯이 있음
  • % μ„œμ‹κ³Ό format() ν•¨μˆ˜ λͺ¨λ‘ νŒ¨λ”© κΈ°λŠ₯ 제곡

% μ„œμ‹μ˜ νŒ¨λ”©

>>> print("%10d" % 12)
        12
>>> print("%-10d" % 12)
12
  • print("%10d" % 12) → 10자리의 곡간을 ν™•λ³΄ν•˜κ³  μš°μΈ‘μ •λ ¬λ‘œ 12λ₯Ό 좜λ ₯ν•˜λŠ” λͺ…λ Ή
  • κΈ°λ³Έ 정렬이 우츑 μ •λ ¬μ΄λ―€λ‘œ μ’ŒμΈ‘μ—μ„œ 아홉 번째 μΉΈλΆ€ν„° 12κ°€ 좜λ ₯됨
  • 쒌츑 정렬을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ„Έλ²ˆμ§Έ μ€„μ²˜λŸΌ -λΆ€ν˜Έλ₯Ό 뢙이면 됨

μ‹€μˆ˜μ—μ„œμ˜ μžλ¦Ώμˆ˜μ™€ μ†Œμˆ˜μ  자릿수 μ§€μ •ν•˜κΈ°

>>> print ("%10.3f" % 5.94343)        # 10자리λ₯Ό ν™•λ³΄ν•˜κ³  μ†Œμˆ˜μ  μ…‹μ§Έ μžλ¦¬κΉŒμ§€ 좜λ ₯
     5.943
>>> print ("%10.2f" % 5.94343)        # 10자리λ₯Ό ν™•λ³΄ν•˜κ³  μ†Œμˆ˜μ  λ‘˜μ§Έ μžλ¦¬κΉŒμ§€ 좜λ ₯
      5.94
>>> print ("%-10.2f" % 5.94343)
5.94
  • ("%10.3f" % 5.94343) → 10자리의 곡간을 ν™•λ³΄ν•˜κ³  μ†Œμˆ˜μ  μ…‹μ§Έ μžλ¦¬κΉŒμ§€ 좜λ ₯ν•˜λΌλŠ” 뜻, μ΄λ•Œ 10자리 μ•ˆμ—λŠ” μ†Œμˆ˜μ μ΄ 포함됨
  • 우츑 μ •λ ¬ 기쀀이며 쒌츑 정렬을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” -λΆ€ν˜Έλ₯Ό 뢙이면 됨

format() ν•¨μˆ˜μ˜ νŒ¨λ”©

>>> print("{0:›10s}".format("Apple"))
     Apple
>>> print("{0:<10s}".format("Apple"))
Apple
  • print("(0:›10s}".format("Apple")) → 10자리의 곡간을 ν™•λ³΄ν•˜κ³  μš°μΈ‘μ •λ ¬λ‘œ λ¬Έμžμ—΄ ‘Apple’을 좜λ ₯ν•˜λΌλŠ” λͺ…λ Ή
  • 쒌츑 정렬을 μœ„ν•΄μ„œλŠ” ‘{0:<10s}’처럼 <λΆ€ν˜Έλ₯Ό μ‚¬μš©ν•˜λ©΄ 됨

μ‹€μˆ˜μ—μ„œμ˜ μžλ¦Ώμˆ˜μ™€ μ†Œμˆ˜μ  자릿수 지정

>>> "{1:>10.5f}.".format("Apple", 5.243)
'   5.24300.'
>>> "{1:‹10.5f}.".format("Apple", 5.243)
'5.24300   .'
  • "{1:>10.5f}.".format("Apple", 5.243) → 10자리의 곡간을 ν™•λ³΄ν•˜κ³ , μ†Œμˆ˜μ  λ‹€μ„― 번째 μžλ¦¬κΉŒμ§€ μ‹€μˆ˜λ₯Ό 좜λ ₯, μ΄λ•Œ 10자리 μ•ˆμ—λŠ” μ†Œμˆ˜μ  포함
  • 우츑 μ •λ ¬ κΈ°μ€€μœΌλ‘œ 쒌츑 정렬을 μœ„ν•΄μ„œλŠ” <λΆ€ν˜Έ μ‚¬μš©

[μ°Έκ³ ]

넀이밍

  • λ³€μˆ˜λͺ…을 μ„œμ‹μ— ν• λ‹Ήν•  수 μžˆλŠ” λ„€μ΄λ°μ΄λΌλŠ” κΈ°λŠ₯
  • λ‹€μŒ μ½”λ“œμ—μ„œ 보듯이 κΈ°μ‘΄ λ²ˆν˜Έλ‚˜ μˆœμ„œλŒ€λ‘œ μžλ£Œν˜•μ— λŒ€μ‘ν•˜λŠ” 것이 μ•„λ‹Œ, ‘name'μ΄λ‚˜ ‘price'처럼 νŠΉμ • λ³€μˆ˜λͺ…을 μ‚¬μš©ν•˜μ—¬ 좜λ ₯값에 직접 ν• λ‹Ή κ°€λŠ₯
  • 특히 ν•œ λ²ˆμ— 좜λ ₯ν•΄μ•Ό ν•˜λŠ” λ³€μˆ˜κ°€ λ§Žμ„ λ•Œ 개발자 μž…μž₯μ—μ„œ λ³€μˆ˜μ˜ μˆœμ„œλ₯Ό ν—·κ°ˆλ¦¬μ§€ μ•Šκ³  μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μž₯점
>>> print("Product: %(name)5s, Price per unit: %(price)5.5f." % 
{"name":"Apple", "price":5.243})
Product: Apple, Price per unit: 5.24300.
>>> print("Product: {name:>5s}, Price per unit: {price:5.5f}.".format(name="A
pple", price=5.243))
Product: Apple, Price per unit: 5.24300.

μ‹€μŠ΅

단어 μΉ΄μš΄νŒ…

λΉ„ν‹€μ¦ˆμ˜ λ…Έλž˜ <Yesterday>μ—μ„œ ‘Yesterday’ λΌλŠ” 단어가 λͺ‡ 번 λ‚˜μ˜€λŠ”μ§€ λ§žνžˆλŠ” 단어 μΉ΄μš΄νŒ… ν”„λ‘œκ·Έλž¨, ν•΄λ‹Ή κ°€μ‚¬λŠ” μ†ŒμŠ€νŒŒμΌ 폴더에 μžˆλŠ” ‘yesterday.txt’에 μ €μž₯λ˜μ–΄ 있음

  • 파일 핸듀링 μ½”λ“œλ₯Ό μ΄μš©ν•΄μ„œ 리슀트의 ν˜•νƒœλ‘œ 각 μ€„μ˜ λ‚΄μš© κ°€μ Έμ˜€κΈ°
# 아직 λ°°μš°μ§€ μ•Šμ•˜μœΌλ―€λ‘œ κ·ΈλŒ€λ‘œ μž…λ ₯ν•˜κΈ°

f = open("yesterday.txt", 'r')
yesterday_ lyric = f.readlines ()
f.close ()

μ‹€ν–‰ κ²°κ³Ό

Number of a Word 'Yesterday' 9
  • μ •λ‹΅
    1. yesterdlay. txt' 파일의 λͺ¨λ“  λ‚΄μš©μ„ λΆˆλŸ¬μ™€ yesterday lyric λ¦¬μŠ€νŠΈμ— μ €μž₯ν•œλ‹€.
    2. 5~7ν–‰μ—μ„œ for문을 μ‚¬μš©ν•˜μ—¬ yesterday lyric 리슀트의 λ‚΄μš©μ„ ν•œ 쀄씩 λΆˆλŸ¬μ˜€λ©΄μ„œ contents λ³€μˆ˜μ— μ €μž₯ν•œλ‹€. 그러면 contents λ³€μˆ˜μ—λŠ” <yesterday> λ…Έλž˜μ˜ λͺ¨λ“  가사가 μ €μž₯λœλ‹€.
    3. 9~10ν–‰μ—μ„œλŠ” upper() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ contents λ³€μˆ˜μ— μžˆλŠ” λͺ¨λ“  값을 λŒ€λ¬Έμžλ‘œ λ³€ν™˜ ν•œ ν›„. count() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ€λ¬Έμž 'YESTERDAY'κ°€ λͺ‡ κ°œμΈμ§€λ₯Ό ν™•μΈν•œλ‹€. μ—¬κΈ°μ„œ contents.upper().count ("YESTERDAY”) 처럼 ν•¨μˆ˜λ₯Ό 뢙여써도 λœλ‹€. upper( ) ν•¨μˆ˜μ˜ 경우 contents λ³€μˆ˜μ— κ°’ 자체λ₯Ό λ³€κ²½ν•˜λŠ” 것이 μ•„λ‹ˆλΌ. λ³€κ²½λœ 값을 λ°˜ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜μ΄κΈ° λ•Œλ¬Έμ΄λ‹€.
    >>> title = "teamlab"
    >>> title
    'teamlab'
    >>> title.upper ()
    'TEAMLAB'
    >>> title
    'teamlab'
    
    • title.upper() λ₯Ό μ‹€ν–‰ν•˜λ©΄ λŒ€λ¬Έμžλ‘œ λ³€ν™˜λ˜μ§€λ§Œ ν•¨μˆ˜ 호좜 ν›„ title λ³€μˆ˜μ˜ λ‚΄μš©μ€ λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.
    • contents.upper().count ("YESTERDAY") μ½”λ“œλ‘œ νŠΉμ •λ¬Έμžκ°€ μžˆλŠ”μ§€ 확인 κ°€λŠ₯
    • κ·Έ κ²°κ³ΌλŠ” n_of_yesterday λ³€μˆ˜μ— μ €μž₯되고 print() ν•¨μˆ˜λ‘œ 좜λ ₯
  • f = open ("yesterday.txt", 'r') yesterday_lyric = f.readlines () f.close () contents = "" for line in yesterday_lyric: contents = contents + line.strip() + "\\n" n_of_yesterday = contents.upper().count ("YESTERDAY") print("Number of a Word 'Yesterday'", n_of_yesterday)

λ‹€μŒ μ½”λ“œμ˜ μ‹€ν–‰ κ²°κ³Ό

name = "Hanbit"
a = name.find("H")
b = name.count ("H") * 8
c = len (name) * 2 + 3
print("REMEMBER", str(a) + str(b) + str (c))

μ •λ‹΅

REMEMBER 0815
  1. name.find("H") → nameμ—μ„œ Hκ°€ λͺ‡λ²ˆμ§Έ μΈλ±μŠ€μ— μœ„μΉ˜ν•˜λŠ”μ§€ μ°ΎλŠ”κ²ƒμ΄λ―€λ‘œ 0이 λœλ‹€.
  2. name.count ("H") * 8 → name μ—μ„œ Hκ°€ λ‚˜μ˜¨ 횟수λ₯Ό μΉ΄μš΄νŠΈν•˜κ³  8을 κ³±ν•˜μ—¬ μ€€λ‹€. μ΄λ•Œ HλŠ” 1번 λ‚˜μ™”μœΌλ―€λ‘œ 8을 κ³±ν•˜μ—¬ 8μ΄λœλ‹€.
  3. len(name) * 2 + 3 → nameλ³€μˆ˜μ˜ 길이λ₯Ό κ΅¬ν•˜κ³  2λ₯Ό κ³±ν•˜μ—¬ 3을 λ”ν•œλ‹€. μ΄λ•Œ name 의 길이 6μ΄λ―€λ‘œ 결과값은 15κ°€ λœλ‹€.
  4. print("REMEMBER", str(a) + str(b) + str (c)) μ—μ„œ "REMEMBER" κ³Ό str(a) + str(b) + str (c)은 콀마λ₯Ό κΈ°μ€€μœΌλ‘œ 띄어쓰기 λΌμ„œ 좜λ ₯되고 str(a) + str(b) + str (c)은 λ”ν•˜κΈ° μ—°μ‚°μœΌλ‘œ λΆ™μ–΄μ„œ 좜λ ₯λ˜μ–΄ 0815κ°€ 좜λ ₯λœλ‹€.