CHAPTER07_์๋ฃ๊ตฌ์กฐ
01_์๋ฃ๊ตฌ์กฐ์ ์ดํด
์๋ฃ๊ตฌ์กฐ์ ๊ฐ๋
- ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค ๋ณด๋ฉด ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ์ฒ๋ฆฌํ ๋๊ฐ ์กด์ฌ
- ์๋ฃ๊ตฌ์กฐ→ ๋ฐ์ดํฐ์ ํน์ง์ ๊ณ ๋ คํ์ฌ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- ์ฌ๋ก
- ์ํ์ ๋ฒํธํ, ํ๋ฐฐ ์ํ๋ฌผ
- ์ ํ๋ฒํธ๋ถ - ์ ํ๋ฒํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ๊ธฐ ์ํด์ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๋๋ค ์์๋๋ก ์ ์ฅ
⇒ ์๋ฃ๊ตฌ์กฐ: ํน์ง์ด ์๋ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ ์ผ๋ก ์ ์ฅ ๋ฐ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ์
ํ์ด์ฌ์์์ ์๋ฃ๊ตฌ์กฐ
- ๋ฆฌ์คํธ→ ์๋ฃ๊ตฌ์กฐ์ ๊ธฐ๋ณธ ์ ์ฅ ๋ฐฉ์
- ํ์ด์ฌ์์ ์ ๊ณตํ๋ ์๋ฃ๊ตฌ์กฐ
02_์คํ๊ณผ ํ
์คํ(stack)
: ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ค๋ ํํ๋ก ๋ฐ์ดํฐ์ ์ ์ฅ ๊ณต๊ฐ์ ๊ตฌํํ๋ ๊ฒ
- ‘Last In First Out’
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ฐํ์ ์ ์ฅ ๊ณต๊ฐ์ ์๋ฏธ
- 4, 10๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก, ๋ฆฌ์คํธ์ ๋น์ทํ์ง๋ง ์ ์ฅ ์์๊ฐ ๋ฐ๋๋ ํํ
- ๊ธฐ๋ณธ ๋ฌธ๋ฒ
- ํธ์(push): ์คํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ
- ํ(pop): ๋ฐ์ดํฐ๋ฅผ ์ถ์คํ๋ ๊ฒ
- ์ฌ๋ก
- ํ๋ฐฐ ์ํ๋ฌผ ์ ์ฅ ๋ฐฉ์
- ์ํ๋ฌผ์ ํ๋์ ๋ฐ์ดํฐ๋ก ๋ณผ ๋, ๋จผ์ ๋ค์ด๊ฐ ์ํ๋ฌผ๋ณด๋ค ๋์ค์ ๋ค์ด๊ฐ ์ํ๋ฌผ์ด ๋จผ์ ๋์์ผ ํ๋ ๊ฒฝ์ฐ
- ํ๋ฐฐ ์ํ๋ฌผ ์ ์ฅ ๋ฐฉ์
- ์คํ ๊ตฌํ(๋ฆฌ์คํธ ์ฌ์ฉ)
- ๋ฆฌ์คํธ๋ผ๋ ์ ์ฅ ๊ณต๊ฐ ์์ฑ → append()ํจ์๋ก ๋ฐ์ดํฐ ์ ์ฅ(push) → pop()ํจ์๋ก ๋ฐ์ดํฐ ์ถ์ถ(pop)
»> a = [1, 2, 3, 4, 5] # ๋ณ์ a์ [1, 2, 3, 4, 5] ํ ๋น
»> a.append(10) # ๋ณ์ a์ 10 ์ถ๊ฐ
»> a
[1, 2, 3, 4, 5, 10] # ๋ณ์ a์ [1, 2, 3, 4, 5, 10] ํ ๋น
»> a.append(20)
»> a
[1, 2, 3, 4, 5, 10, 20]
»> a.pop()
20 # ๊ฐ์ฅ ๋ง์ง๋ง์ ์ ์ฅ๋ ๊ฐ ์ถ์ถ, ๋์์ ๋ฆฌ์คํธ์์ ์ญ์
»> a.pop()
10 # -> ๋ณ์ a์ ๊ฐ์ [1, 2, 3, 4, 5]
- ์คํ์ผ๋ก ๋ง๋ค ์ ์๋ ํ๋ก๊ทธ๋จ
- ์ด์ง์ ๋ณํ๊ธฐ
- → 2๋ก ๋๋ ๋๋จธ์ง ๊ฐ์ ์คํ์ ํธ์ → ๋ง์ง๋ง์ผ๋ก ๋ค์ด์จ ๊ฐ๋ถํฐ ํ์ผ๋ก ์ถ์ถํ๊ณ ์ถ๋ ฅ
- ์ ๋ ฅํ ํ ์คํธ๋ฅผ ์ญ์์ผ๋ก ์ถ์ถํ๋ ํ๋ก๊ทธ๋จ
1 word = input("Input a word: ") # ์
๋ ฅํ ํ
์คํธ ๋ณ์ word์ ์ ์ฅ
2 world_list =list(word) # ๊ทธ ๊ฐ์ ๋ฆฌ์คํธํ์ผ๋ก ๋ณํ
3 print(world_list)
4
5 result = [ ]
6 for _ in range(len(world_list))๏ผ
7 result.append(world_list.pop())
8
9 print(result) # ์
๋ ฅํ ํ
์คํธ์ ์ญ์๊ฐ ์ถ๋ ฅ
10 print(word[๏ผ๏ผ-l])
- ‘ _ ‘๊ธฐํธ
- ์ผ๋ฐ์ ์ผ๋ก for๋ฌธ์์ ๋ง์ด ์ฌ์ฉ
- ํด๋น ๋ฐ๋ณต๋ฌธ์์ ์์ฑ๋๋ ๊ฐ์ ์ฝ๋์์ ์ฌ์ฉํ์ง ์๋๋ค๋ ์๋ฏธ
⇒ 6ํ์ range(len(world_list))์์ ์์ฑ๋๋ ๊ฐ์ ๋ฐ๋ณต๋ฌธ ๋ด์์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก _๋ก ํ ๋น ๋ฐ์ ๊ฒ
ํ(queue)
: ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ‘Fist in First Out’์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ
- ์คํ์ ๋ฐ๋ ๊ฐ๋
- ํ์ ์ผ๋ฐ์ ์ธ ์ ์ฅ ๋ฐฉ์
- ์ฌ๋ก
- ์ํ์์ ๋๊ธฐ ๋ฒํธํ๋ฅผ ๋ฝ์ ๋ ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์
- ๋จผ์ ์จ ์ฌ๋์ด ์์ ๋ฒํธํ๋ฅผ ๋ฝ๊ณ , ๋ฒํธ๊ฐ ๋น ๋ฅธ ์ฌ๋์ด ๋จผ์ ์๋น์ค๋ฅผ ๋ฐ๋ ๊ตฌ์กฐ
- ์ํ์์ ๋๊ธฐ ๋ฒํธํ๋ฅผ ๋ฝ์ ๋ ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์
- ๋ฉ๋ชจ๋ฆฌ ๊ฐ๋
- ์คํ๋ณด๋ค ๊ตฌํ์ด ์กฐ๊ธ ๋ ๋ณต์กํจ
- ์คํ→ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ํ๋ ์ง์ ์ด ๊ณ ์ ๋ผ ์์
- ํ→ ์ฒ์์ ๊ฐ์ด ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๊ฐ์ด ์ฌ์ฉ๋จ์ ๋ฐ๋ผ ๊ณ์ ๋ฐ๋
- ํ ๊ตฌํ
»> a = [1, 2, 3, 4, 5]
»> a.append(10) # a = [1, 2, 3, 4, 5, 10]
»> a.append(20) # a = [1, 2, 3, 4, 5, 10, 20]
»> a.pop(0)
1
»> a.pop(0)
2
- ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ์ ๊ตฌํ ๋ฐฉ๋ฒ๊ณผ ๋์ผ
- pop(0) ์ฌ์ฉ→ pop() ํจ์๋ฅผ ์ฌ์ฉํ ๋ ์ธ๋ฑ์ค๊ฐ 0๋ฒ์งธ์ธ ๊ฐ์ ์ด๋ค๋ ์๋ฏธ
- ⇒ pop()ํจ์→ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๊ฐ์ ๊ฐ์ ธ์จ๋ค๋ ์๋ฏธ / pop(0)→ ๋งจ ์ฒ์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค๋ ์๋ฏธ
03_ํํ๊ณผ ์ธํธ
ํํ
: ๋ฆฌ์คํธ์ ๊ฐ์ ๊ฐ๋ ์ด์ง๋ง ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ๋ฆฌ์คํธ
- ์ ์ธ๊ณผ ์ฌ์ฉ์ด ๋ฆฌ์คํธ์ ์ฝ๊ฐ ๋ค๋ฆ
»> t = (1, 2, 3) # ํํ์ ์ ์ธํ๋ ๋ช
๋ น
»> print (t + t , t * 2)
(1, 2, 3, 1, 2, 3) (1, 2, 3, 1, 2, 3)
»> len(t)
3
- ํํ→ ๊ดํธ๋ฅผ ์ด์ฉํ์ฌ t = (1, 2, 3)๊ณผ ๊ฐ์ ํํ๋ก ์ ์ธ
- ๋ฆฌ์คํธ์ ๊ณตํต์
- ๋ฆฌ์คํธ์์ ์ฌ์ฉํ๋ ์ฐ์ฐ, ์ธ๋ฑ์ฑ, ์ฌ๋ผ์ด์ฑ ๋ชจ๋ ๋์ผํ๊ฒ ์ ์ฉ
- ๋ฆฌ์คํธํ ๋ฐ์ดํฐ์ ์ฌ์ฉํ๋ ๋ชจ๋ ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ(ํํ ๊ฐ์ ๋ง์ , ๊ณฑ์ , len() ํจ์)
- ๋ฆฌ์คํธ์ ์ฐจ์ด์
- ๋ฆฌ์คํธ→ ๋๊ดํธ [ ]๋ฅผ ์ด์ฉ
- **** ํํ์ ๊ฐ์ ๋ง์๋๋ก ๋ณ๊ฒฝํ ์ ์์ ****
- ํํ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ์ค๋ฅ ๋ฐ์
»>t[l] =5
Traceback (most recent call last)๏ผ
File "<stdin>", line 1, in <module>
TypeError๏ผ 'tuple' object does not support item assignment
⇒ ‘ํํ ์ค๋ธ์ ํธ(‘tuple’ object)์๋ ์๋ก์ด ์์ดํ (item)์ ํ ๋น์ ํ์ฉํ์ง ์๋๋ค.’
- ๊ฐ์ด ํ๋๋ฐ์ ์์ ๋ ํํ์ ์ ์ธ
- ๋ฐ๋์ ์ฝค๋ง(,)๋ฅผ ๋ถ์ฌ t ๊ฐ ํํ์์ ์ ์ธํด์ผ ํจ
- ex) t = (1, )
- If, t = (1)๋ก ์ ์ธ → t = 1๋ก ์ดํดํ๊ฒ ๋จ
- → t = (5 + 2)* 2์ ๊ฐ์ด ์ฐ์ฐ์์ ์ฌ์ฉํ๋ ๊ดํธ๋ก ์ดํดํ๊ธฐ ๋๋ฌธ
- ๋ฐ๋์ ์ฝค๋ง(,)๋ฅผ ๋ถ์ฌ t ๊ฐ ํํ์์ ์ ์ธํด์ผ ํจ
- ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
- ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค ๋ณด๋ฉด ์ฌ๋ฌ ์ฌ๋๊ณผ ํจ๊ป ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
- ์์ ์ด ํ๋์ ํจ์๋ง ๋ง๋ค๊ณ , ๋ค๋ฅธ ์ฌ๋์ด ๊ทธ ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ๋ฐ์
- ์ด๋ ๋ฐํํด์ฃผ๋ ํ์ ์ ํํ๋ก ์ ์ธ→ ๋ฐ์์ ์ฌ์ฉํ๋ ์ฌ๋์ด ๋ง์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ์ง ๋ชปํ๊ฒ ๋จ.
- ๋ฐ๋๋ฉด ์ ๋๋ ๋ฐ์ดํฐ ⇒ ํ๋ฒ์ด๋ ์ด๋ฆ, ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ ๋๋ ์ ๋ณด ๋ฑ
⇒ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ฌํ ์ดํด ์์ด ๋ง์๋๋ก ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋ ํํ์ ์ด๋ฅผ ๋ฐฉ์งํด์ฃผ๋ ์ญํ
์ธํธ
: ๊ฐ์ ์์ ์์ด ์ ์ฅํ๋ ์ค๋ณต์ ๋ถํํ๋ ์๋ฃํ
- ์ํ์ ์งํฉ๊ณผ ๊ฐ๋ ์ ์ผ๋ก ์์ฃผ ๋น์ทํจ
- ์ค๋ณต์ ๋ถํํ๋ ํน์ง ๋๋ฌธ์ ํ๋ก๊ทธ๋๋ฐ์์ ๋งค์ฐ ์ ์ฉํจ
- ex) ๋ฌธ์ ํ๋์ ๋ค์ด๊ฐ ์๋ ๋จ์ด ์ข ๋ฅ์ ๊ฐ์๋ฅผ ์ ๋ ๋ชจ๋ ๋จ์ด๋ฅผ ์ถ์ถํ ํ ์ธํธ๋ก ๋ณํํ๋ฉด ๋จ์ด ์ข ๋ฅ์ ๊ฐ์๋ฅผ ์ฝ๊ฒ ํ์ ๊ฐ๋ฅ
- ํ์ด์ฌ์์๋ ์ธํธ ์ ์ธ์ ํ๋ ๊ฒ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
»> s = set([1, 2, 3, 1, 2, 3]) # set() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ 1, 2, 3์ ์ธํธ ๊ฐ์ฒด๋ก ์์ฑ
»> s
{1, 2, 3}
- set() ํจ์๋ฅผ ์ฌ์ฉ→ ๋ฆฌ์คํธ๋ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ฉด ํด๋น ๊ฐ์ด ์ธํธ ํํ๋ก ๋ณํ๋จ
- [1, 2, 3, 1, 2, 3]์ด๋ผ๋ ๋ฆฌ์คํธํ์ ๊ฐ์ ์ธํธ๋ก ๋ณํ→ ์ค๋ณต์ ์ ๊ฑฐํ ํ {1, 2, 3}์ผ๋ก ๋ณํ๋์ด ์ถ๋ ฅ
- ํํ๊ณผ ๋ค๋ฅด๊ฒ ์ญ์ ๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅ→ ์ด ๊ธฐ๋ฅ์ ์ด์ฉํด ๋ค์ํ ํจ์ ์ง์
»> S
{1, 2, 3}
»> s.add(l)
»> s
{1, 2, 3} # 1 ์ ์ถ๊ฐํ๋ ๋ช
๋ น์ด์ง๋ง ์ค๋ณต ๋ถํ๋ก ์ถ๊ฐ๋์ง ์์
»> s.remove(l)
»> s
{2, 3} # 1 ์ญ์
»> s.update([1, 4, 5, 6, 7])
»> s
{1, 2, 3, 4, 5, 6, 7} # [1, 4, 5, 6, 7] ์ถ๊ฐ
»> s.discard(3)
»> s
{1, 2, 4, 5, 6, 7} #3 ์ญ์
»> s.clear()
»> s
set() # ๋ชจ๋ ์์ ์ญ์
- ์ง์ํ๋ ํจ์
- add() : ์์ ํ๋๋ฅผ ์ถ๊ฐํ๋ ํจ์
- remove() & discard() : ์์ ํ๋๋ฅผ ์ ๊ฑฐํ๋ ํจ์
- update() : ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๊ทธ๋๋ก ์ถ๊ฐํ๋ ํจ์
- clear() : ๋ชจ๋ ๋ณ์๋ฅผ ์ง์ฐ๋ ํจ์
- ๊ฐ์ ๋ชจ๋ ์์ ์์ด ์ ์ฅ๋๋ ๋์์ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ ์ฅ๋จ
- ํ์ด์ฌ์ ์ธํธ๋ ์ํ์ ์งํฉ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์ํ ์งํฉ ์ฐ์ฐ ์ ๊ณต
- ๊ต์งํฉ, ํฉ์งํฉ, ์ฐจ์งํฉ
»> s1 =set([1, 2, 3, 4, 5])
»> s2 =set([3, 4, 5, 6 ,7])
»>
»> s1.union(s2) # s1๊ณผ s2์ ํฉ์งํฉ
{1, 2, 3, 4, 5, 6, 7}
»> s1 | s2 # set([l, 2, 3, 4, 5, 6, 7])
{1, 2, 3, 4, 5, 6, 7}
»> s1.intersection(s2) # s1 s2์ ๊ต์งํฉ
{3, 4, 5}
»> s1 & s2 # set([3, 4, 5])
{3, 4, 5}
»> s1.difference(s2) # s1๊ณผ s2์ ์ฐจ์งํฉ
{1, 2}
»> s1 - s2 # set([l, 2])
{1, 2}
- ํฉ์งํฉ : ๋ ์งํฉ์ ์ค๋ณต๊ฐ์ ์ ๊ฑฐํ๊ณ ํฉ์น๋ ์ฐ์ฐ
- ๊ต์งํฉ : ๋ ์งํฉ ์์ชฝ์ ๋ชจ๋ ํฌํจ๋ ๊ฐ๋ง ์ถ์ถํ๋ ์ฐ์ฐ( if๋ฌธ์์ ๋ฐฐ์ ๋ and ์กฐ๊ฑด์ ๊ฐ๋ ๊ณผ ๋น์ท)
- ์ฐจ์งํฉ : ์์ ์๋ ์งํฉ s1์ ์์ ์ค s2์ ํฌํจ๋ ์์๋ฅผ ์ ๊ฑฐํ๋ ์ฐ์ฐ
04_๋์ ๋๋ฆฌ
๋์ ๋๋ฆฌ์ ๊ฐ๋
- ์์ด์ฌ์ ์์ ๊ฒ์์ ์ํด ์์ด ๋จ์ด๋ค์ ์ ์ฅํด ๋์ ๋ฐฉ์๊ณผ ๋น์ท
- ์์ด์ฌ์ ์์๋ ๊ฐ ๋จ์ด๋ฅผ ๊ฒ์ํ ์ ์๋๋ก ์์ธindex์ ๋ง๋ค์ด ๋๊ณ ์์ธ์ ํตํด ๊ทธ ๋จ์ด๋ฅผ ์ฐพ์ ์๋ฏธ๋ฅผ ํ์
ํจ
- ์์ธ: ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ฝ๋๋ก ๊ตฌ๋ถํด ๋์ ์ ์ผํ ์ ๋ณด๋ก, ๋จ์ด๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ์
- ์์ด์ฌ์ ์์๋ ๊ฐ ๋จ์ด๋ฅผ ๊ฒ์ํ ์ ์๋๋ก ์์ธindex์ ๋ง๋ค์ด ๋๊ณ ์์ธ์ ํตํด ๊ทธ ๋จ์ด๋ฅผ ์ฐพ์ ์๋ฏธ๋ฅผ ํ์
ํจ
- ํ์ด์ฌ์ ๋์
๋๋ฆฌ ๊ตฌ์กฐ
- ๋ฐ์ดํฐ์ ์ ์ผํ ๊ตฌ๋ถ์์ธ ํคkey๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฒ์ํ ์ ์๊ฒ ํ๊ณ , ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐvalue ์ด๋ผ๋ ์ด๋ฆ๊ณผ ์์ผ๋ก ์ ์ฅํ์ฌ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๊ฒ ํจ
- ex) ๊ฐ์ธ์ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ ํ๊ต์ ํ๋ฒ, ์ ํ ๋ฒํธ ๋ฑ→ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ๋ ํค
- ํ๋ฒ→ ๋๋จธ์ง ์ ๋ณด๋ฅผ ๊ตฌ๋ถํ๋ ํค
ํ์ด์ฌ์์์ ๋์ ๋๋ฆฌ
- ๋์
๋๋ฆฌ ์ ์ธ
- ์ค๊ดํธ{ }๋ฅผ ์ฌ์ฉํ์ฌ ํค์ ๊ฐ์ ์์ผ๋ก ๊ตฌ์ฑ
- ๊ฐ์๋ ๋ค์ํ ์๋ฃํ์ด ๋ค์ด๊ฐ ์ ์์
- ๋ฌธ์์ด, ๋ฆฌ์คํธ์ ๊ฐ์ด ํ ๋ฒ์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ, ํํ ๋ฐ ์ธํธ, ๋์ ๋๋ฆฌ๊น์ง ์ฌ์ฉ ๊ฐ๋ฅํจ
»> student_info = {20140012๏ผ’Sungchul’, 20140059:'Jiyong', 20140058๏ผ’Jaehong'}
- student_info ๋ผ๋ ๋ณ์๋ฅผ ๋จผ์ ์ ์ธ→ ํด๋น ๋ณ์์{ํค:๊ฐ} ํํ๋ก ๊ฐ์ ์ ๋ ฅํจ
- ํด๋น ๋ณ์์์ ํน์ ๊ฐ ํธ์ถ
»> student_info๏ผป20140012๏ผฝ
'Sungchul'
- ํด๋น ๊ฐ์ ํค๋ฅผ ๋๊ดํธ [ ] ์์ ๋ฃ์ด ํธ์ถํจ
- ํค๋ ๋ฌธ์์ด ๋๋ ์ ์ํ์ผ๋ก ์ ์ธ์ด ๊ฐ๋ฅํจ(์ฌ๊ธฐ์๋ ์ ์ํ์ผ๋ก ์ ์ธํ์ผ๋ฏ๋ก ์ ์ํ์ผ๋ก ํธ์ถ)
- ์ฌํ ๋น & ๋ฐ์ดํฐ ์ถ๊ฐ
»> student_info[20140012]= 'Sungchul'
»> student_info[20140012]
'Sungchul'
»> student_info[20140039]= 'Wonchul'
»> student_info
{20140012: ’Sungchul’, 20140059๏ผ 'Jiyong', 20140058: 'Jaehong', 20140039๏ผ 'Wonchul'}
- ๋์ ๋๋ฆฌ์์์ ์ฌํ ๋น๋ ๋ฆฌ์คํธ์์ ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ ๋ค๋ฅด์ง ์์
- ํค๋ฅผ ์ด์ฉํ์ฌ ํด๋น ๋ณ์๋ฅผ ํธ์ถํ ํ ์๋ก์ด ๊ฐ์ ํ ๋น
- ๋ฐ์ดํฐ ์ถ๊ฐ๋ ์๋ก์ด ํค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ ๋นํ๋ฉด ๋จ
- ํ ๋น ์ ์ฌ์ฉ๋๋ ํค๊ฐ ๊ธฐ์กด์ ์๋ ํค๋ผ๋ฉด ํด๋น ๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ , ๊ธฐ์กด์ ์๋ ํค๋ผ๋ฉด ์๋ก์ด ๊ฐ์ผ๋ก ์ถ๊ฐ๋จ
๋์ ๋๋ฆฌ ํจ์
- ํ์ด์ฌ→ ๋์ ๋๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ค์ํ ํจ์๋ฅผ ์ ๊ณตํจ
- ํนํ for๋ฌธ์ด๋ if๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ค์ํ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅ
- ex) ๊ตญ๊ฐ๋ช ๊ณผ ๊ตญ๊ฐ ์ ํ๋ฒํธ๋ฅผ ๋ฌถ์ด ๋ณด์ฌ์ฃผ๋ ์ฝ๋
»> country_code = {} # ๋์
๋๋ฆฌ ์์ฑ
»> country_code = {"America"๏ผ 1, "Korea"๏ผ 82, "China"๏ผ 86, "Japan"๏ผ 81}
»> country_code
{'America'๏ผ 1, 'Korea'๏ผ 82, 'China'๏ผ 86, 'Japan': 81}
- ๋์
๋๋ฆฌ ๋ณ์ ์์ ํค์ ๊ฐ์ ์ถ๋ ฅํ๋ ํจ์
- keys() ํจ์: ํค๋ง ๋ฆฌ์คํธ ํํ๋ก ์ถ๋ ฅํ๋ ํจ์
»> country_code.keys() # ๋์
๋๋ฆฌ์ ํค๋ง ์ถ๋ ฅ
dict_keys(['America', 'Korea', 'China', 'Japan'])
- values() ํจ์: ๊ฐ์ ์ถ๋ ฅํ๋ ํจ์
»> country_code["German"] = 49 # ๋์
๋๋ฆฌ ์ถ๊ฐ
»> country_code
{'America': 1, 'Korea': 82, 'China': 86, 'Japan': 81, 'German': 49}
»> country_code.values() # ๋์
๋๋ฆฌ์ ๊ฐ๋ง ์ถ๋ ฅ
dict_values([l, 82, 86, 81, 49])
- items() ํจ์: ํค-๊ฐ ์์ ๋ชจ๋ ๋ณด์ฌ์ฃผ๋ ํจ์
»> country_code.items() # ๋์
๋๋ฆฌ ๋ฐ์ดํฐ ์ถ๋ ฅ
dict_items([('America1), (’Korea', 82), ('China', 86), (‘Japan’, 81), ('German', 49)])
- for๋ฌธ๊ณผ ์ฌ์ฉ
- ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ for๋ฌธ๊ณผ ํจ๊ป ๋ง์ด ์ฌ์ฉ
- ํค-๊ฐ ์์ ํ๋ฉด์ ์ถ๋ ฅ
»> for k, v in country_code.items()๏ผ
... print("Key:", k)
... print("Value๏ผ", v)
...
Key: America
Value: 1
Key๏ผ Korea
Value๏ผ 82
Key๏ผ China
Value: 86
Key๏ผ Japan
Value๏ผ 81
Key๏ผ Gernman
Value๏ผ 49
- if๋ฌธ ์ฌ์ฉ
»> "Korea" in country_code.keys() # ํค์ "Korea"๊ฐ ์๋์ง ํ์ธ
True
»> 82 in country_code.values() # ๊ฐ์ 82๊ฐ ์๋์ง ํ์ธ
True
- ํน์ ํค๋ ๊ฐ์ด ํด๋น ๋ณ์์ ํฌํจ๋์ด ์๋์ง ํ์ธ
05_collections ๋ชจ๋
: ๋ค์ํ ์๋ฃ๊ตฌ์กฐ์ธ ๋ฆฌ์คํธ, ํํ, ๋์ ๋๋ฆฌ ๋ฑ์ ํ์ฅํ์ฌ ์ ์๋ ํ์ด์ฌ์ ๋ด์ฅ ์๋ฃ๊ตฌ์กฐ ๋ชจ๋
- ๊ธฐ์กด์ ๋ฐฐ์ ๋ ์๋ฃ๊ตฌ์กฐ๋ณด๋ค ํจ์จ์ ์ด๊ณ ํธ๋ฆฌ
- deque, OrderedDict, defaultdict, Counter, namedtuple ๋ฑ์ ์ ๊ณต
from collections import deque
from collections import OrderedDict
from collections import defaultdict
from collections import Counter
from collections import namedtuple
deque ๋ชจ๋
: ์คํ๊ณผ ํ๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๋ชจ๋
- ๋ฆฌ์คํธ์ ๋น์ทํ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํจ
- ์คํ ์ฌ์ฉ
»> from collections import deque
»>
»> deque_list = deque() # ๋ฆฌ์คํธ์ ๋น์ทํ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
»> for i in range(5):
... deque_list.append(i)
...
»> print(deque_list)
deque([0, 1, 2, 3, 4])
- append() ํจ์๋ฅผ ์ฌ์ฉ→ ๊ธฐ์กด ๋ฆฌ์คํธ์ฒ๋ผ ๋ฐ์ดํฐ๊ฐ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ๋๋ฆฌ๋ฉด์ ์์ด๊ธฐ ์์ํจ
»> deque_list.pop()
4
»> deque_list.pop()
3
»> deque_list.pop()
2
»> deque_list
deque([0, 1])
- deque_list.pop()์ ์ํ→ ์ค๋ฅธ์ชฝ ์์๋ถํฐ ํ๋์ฉ ์ถ์ถ๋จ
- → ์คํ์ฒ๋ผ ๋์ค์ ๋ฃ์ ๊ฐ๋ถํฐ ํ๋์ฉ ์ถ์ถ๋๋ ๊ฒ
- ํ ์ฌ์ฉ
»> from coUections import deque
»>
»> deque_list = deque()
»> for i in range(5)๏ผ
...
deque_list.appendleft(i)
»> print(deque_list)
deque([4, 3, 2, 1, 0])
- appendleft() ํจ์→ ์๋ก์ด ๊ฐ์ ์ผ์ชฝ๋ถํฐ ์ ๋ ฅํ๋๋ก ํ์ฌ ๋จผ์ ๋ค์ด๊ฐ ๊ฐ๋ถํฐ ์ถ๋ ฅ๋๋๋ก ํจ
- pop(0)์ deque์์ ์๋ X
- ๊ธฐ์กด ๋ฆฌ์คํธ์ ๋น๊ต์ ์ฅ์
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํน์ฑ์ ์ง์ํจ
- ์ฐ๊ฒฐ๋ฆฌ์คํธ: ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์์์ ๊ฐ์ ํ ์ชฝ์ผ๋ก ์ฐ๊ฒฐํ ํ, ์์์ ๋ค์ ๊ฐ์ ์ฃผ์ ๊ฐ์ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฒ
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํน์ฑ์ ์ง์ํจ
- [๊ทธ๋ฆผ 7-6]์ฒ๋ผ ๋ค์ ์์์ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ์ํ์ผ๋ก ์ ์ฅ์ด ๊ฐ๋ฅํจ
- ๋ง์ง๋ง ์์์ ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ฃผ์๋ฅผ ์ ์ฅ์์ผ ํด๋น ๊ฐ์ ์ฐพ์๊ฐ ์ ์๋๋ก ์ฐ๊ฒฐ์ํด
- rotate() ํจ์: ๊ธฐ์กด deque์ ์ ์ฅ๋ ์์๋ค ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๊พธ๋ ๊ธฐ๋ฒ
- ์ฐ๊ฒฐ๋ฆฌ์คํธ→ ์์ชฝ ๋์ ์์๋ค์ ์ฐ๊ฒฐํ ์ ์์ผ๋ฏ๋ก ์ํ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง
- ์ด๋ฌํ ํน์ง์ ์ด์ฉ→ ๊ฐ ์์์ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ํ๋์ฉ ์ฎ๊ธด๋ค๋ฉด ์ค์ ๋ก ์์๋ฅผ ์ฎ๊ธฐ์ง ์๋๋ผ๋ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ๋ฐ๊ฟ ์ ์์
- ⇒ ์ด๋ฌํ ํน์ง ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ธฐ๋ฅ ์ค ํ๋→ rotate() ํจ์
- ๋ง์ง๋ง ์์์ ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ฃผ์๋ฅผ ์ ์ฅ์์ผ ํด๋น ๊ฐ์ ์ฐพ์๊ฐ ์ ์๋๋ก ์ฐ๊ฒฐ์ํด
»> from collections import deque
»>
»> deque_list = deque()
»> for i in range(5)๏ผ
... deque_list.appendleft(i)
...
»> print(deque_list)
deque([0, 1, 2, 3, 4])
»> deque_list.rotate(2) # rotate(2)ํจ์๋ฅผ ์ํ
»> print(deqiie_list)
deque([3, 4, 0, 1, 2]) # 3๊ณผ 4๊ฐ 0๋ฒ์งธ, 1๋ฒ์งธ ์ธ๋ฑ์ค๋ก ์ด๋
»> deque_list.rotate(2) # rotate(2)ํจ์๋ฅผ ์ํ
»> print(deque_list)
deque([1, 2, 3, 4, 0]) # 1๊ณผ 2๊ฐ 0๋ฒ์งธ, 1๋ฒ์งธ ์ธ๋ฑ์ค๋ก ์ด๋
- ๊ธฐ์กด ๋ฐ์ดํฐ์ rotate(2)ํจ์๋ฅผ ์ํ์ํค๋ฉด 3๊ณผ 4์ ๊ฐ์ด ๋ ์นธ์ฉ ์ด๋ํ์ฌ 0๋ฒ์งธ, 1๋ฒ์งธ ์ธ๋ฑ์ค๋ก ์ฎ๊ฒจ์ง ๊ฒ์ ์ ์ ์์
- ๋ค์ rotated๋ฅผ ์ํ์ํค๋ฉด 1๊ณผ 2๊ฐ 0๋ฒ์งธ, 1๋ฒ์งธ ์ธ๋ฑ์ค๋ก ์ด๋
- ์ด์ธ์๋ deque๋ชจ๋์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํจ
- reversed() ํจ์ ์ฌ์ฉ: ๊ธฐ์กด๊ณผ ๋ฐ๋๋ก ๋ฐ์ดํฐ ์ ์ฅ
»> print(deque(reversed(deque_list)))
deque([0, 4, 3, 2, 1])
- extend( ), extendleft() ํจ์ ์ฌ์ฉ: ๋ฆฌ์คํธ๊ฐ ํต์งธ๋ก ์ค๋ฅธ์ชฝ์ด๋ ์ผ์ชฝ์ผ๋ก ์ถ๊ฐ
»> deque_list.extend([5, 6, 7])
»> print(deque_list)
deque([l, 2, 3, 4, 0, 5, 6, 7])
»> deque_list.extendleft([5, 6, 7])
»> print(deque_list)
deque([7, 6, 5, 1, 2, 3, 4, 0, 5, 6, 7])
- ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ ์ฌ์ฉ / ๋น ๋ฅธ ์๋๋ผ๋ ์ธก๋ฉด์์ ์ ์ฉ
- ์์์ ์ ์ํ ์ฌ๋ฌ ๊ฐ์ง ํจ์๋ ๊ธฐ์กด ๋ฆฌ์คํธ์์๋ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํจ
- ๊ทธ๋ฌ๋ deque์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ ๋ฐฉ์ ์ฌ์ฉ→ ์ฌ์ฉ์๋ ์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ญ์ ํ ์ ์์
- ๋์ฉ๋์ ํ๋ ์คํ์ ์ฒ๋ฆฌ์ deque ์ฌ์ฉ์ ๊ถ์ฅ
OrderedDict ๋ชจ๋
: ์์๋ฅผ ๊ฐ์ง ๋์ ๋๋ฆฌ ๊ฐ์ฒด
- ๋์ ๋๋ฆฌ→ ์์๋ฅผ ๋ณด์ฅํ์ง ์๋ ๊ฐ์ฒด
- ๋์
๋๋ฆฌ ํ์ผ์ ์ ์ฅํ๋ฉด ํค๋ ์ ์ฅ ์์์ ์๊ด์์ด ์ ์ฅ๋จ
1 d = {} 2 d['x'] = 100 3 d['l'] = 500 4 d['y'] = 200 5 d['z']=300 6 7 for k, v in d.items()๏ผ 8 print(k, v) โ
- x, l, y, z์ ์์๋๋ก ํค๋ฅผ ์ ์ฅํ์ง๋ง, ๊ฒฐ๊ณผ๋ ์ ์ฅํ ์์์ ์๊ด์์ด ๋ค์ํ ํํ๋ก ์ถ๋ ฅ(์ปดํจํฐ๋ง๋ค ๊ฒฐ๊ณผ ์์ด)
- but, OrderedDict ๋ชจ๋→ ํค์ ์์๋ฅผ ๋ณด์ฅ
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฅํ ํค์ ์์๋๋ก ๊ฒฐ๊ณผ๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋จ
1 from collections import OrderedDict # OrderedDict ๋ชจ๋ ์ ์ธ
2
3 d = OrderedDictO
4 d['x'] = 100
5 d['y'] = 200
6 d['z'] = 300
7 d['l'] = 500
8
9 for k, v in d.items()๏ผ
10 print(k, v)
- ์ด๋ค ์ปดํจํฐ๋ ์๊ด์์ด x, y, z, l์ ์์๋๋ก ํค-๊ฐ์์ด ์ถ๋ ฅ๋จ
- ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ๋์ ๋๋ฆฌ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ํค๋ ๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
- ex) ํค๋ฅผ ์ด์ฉํ์ฌ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ฅผ ๋ฒํธ ์์๋๋ก ์ ๋ ฌํ ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ
- ์ด๋ค ์ปดํจํฐ๋ ์๊ด์์ด x, y, z, l์ ์์๋๋ก ํค-๊ฐ์์ด ์ถ๋ ฅ๋จ
- ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ๋์ ๋๋ฆฌ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ํค๋ ๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
- ex) ํค๋ฅผ ์ด์ฉํ์ฌ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ฅผ ๋ฒํธ ์์๋๋ก ์ ๋ ฌํ ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ
- ๋์
๋๋ฆฌ์ ๊ฐ์ธ ๋ณ์ d๋ฅผ ๋ฆฌ์คํธ ํํ๋ก ๋ง๋ ๋ค์, sorted() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ
- sorted(d.items(), key=sort_by_key)์ ์ฝ๋๋ง ๋ฐ๋ก ์คํํ๋ฉด ๋ค์์ฒ๋ผ ์ ๋ ฌ๋์ด ์ด์ฐจ์ ํํ๋ก ๊ฐ์ด ์ถ๋ ฅ๋จ
- ์ฆ, ๊ธฐ์กด์ ๋์ ๋๋ฆฌ ๋ณ์๋ฅผ ๋ฆฌ์คํธ๋ก ์ถ์ถํ๊ณ , sorted() ํจ์๋ก ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ํ, ๋ค์ OrderedDict ๋ชจ๋๋ก ๊ฐ์ธ์ฃผ๋wrapping ๋ฐฉ์
- → ๊ธฐ์กด์ ๋์ ๋๋ฆฌ๋ ๋ฆฌ์คํธ์ ์์๋ฅผ ์งํค๋ฉด์ ๋์ ๋๋ฆฌ ํํ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
- if, ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ค๋ฉด 1ํ๊ณผ 2ํ์ ๋ค์์ฒ๋ผ ๋ฐ๊พธ๋ฉด ๋จ
- ์ฐธ๊ณ ๋ก t[0]๊ณผ t[1]์ ์ ๋ฆฌ์คํธ ์์ ํํ ๊ฐ ์ค 0๋ฒ์งธ ์ธ๋ฑ์ค(l, x, y, z)์ 1 ๋ฒ์งธ ์ธ๋ฑ์ค(500, 100, 200, 300)๋ฅผ ์๋ฏธํจ
defaultdict ๋ชจ๋
: ๋์ ๋๋ฆฌ์ ๋ณ์๋ฅผ ์์ฑํ ๋ ํค์ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ
→ ์๋ก์ด ํค๋ฅผ ์์ฑํ ๋ ๋ณ๋ค๋ฅธ ์กฐ์น ์์ด ์๋ก์ด ๊ฐ์ ์์ฑํ ์ ์์
- ์ค์ ๋์ ๋๋ฆฌ์์๋ ํค๋ฅผ ์์ฑํ์ง ์๊ณ ํด๋น ํค์ ๊ฐ์ ํธ์ถํ๋ ค๊ณ ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํจ
→ ์ฝ๋์์ first์ ํค๊ฐ์ ๋ณ๋๋ก ์์ฑํ์ง ์์ ์ฑ ๋ฐ๋ก ํธ์ถํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ
- defaultdict ๋ชจ๋์ ์ฌ์ฉ
1 from collections import defaultdict 2 3 d = defaultdict(lambda๏ผ 0) 4 print(d["first"]) โ
- 3ํ์ d = defaultdict(lambda๏ผ 0)
→ defaultdict ๋ชจ๋ ์ ์ธ ๋์์ ์ด๊น๊ฐ์ 0์ผ๋ก ์ค์
→ ‘return 0’์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋จ
→ ์ด๋ค ํค๊ฐ ๋ค์ด์ค๋๋ผ๋ ์ฒ์ ๊ฐ์ ์ ๋ถ 0์ผ๋ก ์ค์ ํ๋ค๋ ๋ป
- ๋ฆฌ์คํธ ํํ๋ก ์ด๊น๊ฐ ์ค์
1 from collections import defaultdict 2 3 s =๏ผป('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)๏ผฝ 4 d = defaultdict(list) 5 for k, v in s๏ผ 6 d[k].append(v) 7 8 print(d.items()) 9 [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])] โ
- 3ํ - s ๋ณ์์ ํํ ๋ฐ์ดํฐ๋ค์ ์ด์ฐจ์ ๋ฆฌ์คํธ ํํ๋ก ์ ์ฅ
- 4ํ - ๋ณ์ d๋ฅผ defaultdict ํ์ ์ผ๋ก ์ ์ธํ๋ฉด์ ์ด๊น๊ฐ์ ๋ฆฌ์คํธ๋ก ์ ์ธ
- 5ํ~ - for๋ฌธ์ด ์๋ํ๋ฉด์ ๋ณ์ s์ ๊ฐ ์์์์ ํค ๊ฐ๊ณผ ์ค์ ๊ฐ์ ์ถ์ถํ์ฌ ๋ณ์ ์์ ์ถ๊ฐ
- ์ค์ํ ๊ฒ์ ๋ณ์ d๋ deafultdict ํ์ ์ด๋ฉด์ list๊ฐ ์ด๊น๊ฐ์ผ๋ก ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ์๋ก์ด ํค ๊ฐ์ด ์๋๋ผ๋ ๋ณ๋๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์
- → ์ผ๋ฐ์ ์ธ ‘dict’์ ๋นํด ์ฝ๋ ์๋ฅผ ์ค์ผ ์ ์์ด defaultdict ํ์ ์ ๊ฐ์ฅ ํฐ ์ฅ์
Counter ๋ชจ๋
: ์ํ์ค ์๋ฃํ์ ๋ฐ์ดํฐ ๊ฐ์ ๊ฐ์๋ฅผ ๋์ ๋๋ฆฌ ํํ๋ก ๋ฐํํ๋ ๋ฐฉ๋ฒ
- ๋ฆฌ์คํธ๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ ์ํ์ค ์๋ฃํ์ ์ ์ฅ๋ ์์ ์ค์์ ๊ฐ์ ๊ฐ์ด ๋ช ๊ฐ ์๋์ง ๊ทธ ๊ฐ์๋ฅผ ๋ฐํํจ
»> from collections import Counter
»>
»> text = list("gallahad")
»> text
['g' 'a', 'l', 'l', 'a', 'h', 'a', 'd']
»> c = Counter(text)
»> c
Counter({'a': 3, 'I'๏ผ 2, 'g'๏ผ 1, 'h': 1, 'd'๏ผ 1})
»> c["a"]
3
- ๊ธฐ์กด ๋ฌธ์์ด๊ฐ์ธ ‘gallahad’๋ฅผ ๋ฆฌ์คํธํ์ผ๋ก ๋ณํํ ํ, text ๋ณ์์ ์ ์ฅ
- (‘gallahad’ ์์ฒด๋ ์ํ์ค ์๋ฃํ์ธ ๋ฌธ์์ด์ด๋ฏ๋ก ๊ตณ์ด ๋ฆฌ์คํธ๋ก ๋ณํํ ํ์๋ ์์ง๋ง ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๋ฆฌ์คํธ ํํ๋ก ์ ์ฅ)
- c๋ผ๋ Counter ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด์ text ๋ณ์๋ฅผ ์ด๊น๊ฐ์ผ๋ก ์ค์
- → ์ด๋ฅผ ์ถ๋ ฅํ๋ฉด ์ ๊ฒฐ๊ณผ์ฒ๋ผ ๊ฐ ์ํ๋ฒณ์ด ๋ช ๊ฐ์ฉ ์๋์ง ์ฝ๊ฒ ํ์ธ ๊ฐ๋ฅ
- c["a"]์ฒ๋ผ ๋์ ๋๋ฆฌ ํํ์ ๋ฌธ๋ฒ์ ๊ทธ๋๋ก ์ด์ฉํด ํน์ ํ ์คํธ์ ๊ฐ์๋ ๋ฐ๋ก ์ถ๋ ฅ ๊ฐ๋ฅ
- Counter๋ฅผ ์ด์ฉ→ ๊ฐ ๋ฌธ์์ ๊ฐ์ ์ธ๋ ์์ ์ ๋งค์ฐ ์ฝ๊ฒ ํ ์ ์์
- ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ ๋ ฌ๊น์ง ๋๋ธ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ธํ ์ ์๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด์ Lab์์ ์ํํ ์์
์ ๋จ ํ ์ค์ ์ฝ๋๋ก ์์ฑ
- Counter๋ ๋จ์ํ ์ํ์ค ์๋ฃํ์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ ์ญํ ๋ ํ์ง๋ง, ๋์ ๋๋ฆฌ ํํ๋ ํค์๋ ํํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ Counter๋ฅผ ์์ฑํ ์ ์์
- ๋์ ๋๋ฆฌ ํํ๋ก Counter ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
»> from collections import Counter
»>
»> c = Counter({'red': 4, 'blue'๏ผ 2})
»> print(c)
Counter({'red'๏ผ 4, 'blue'๏ผ 2})
»> print(list(c.elements()))
['red', 'red', 'red', 'red', 'blue', 'blue']
- {'red'๏ผ 4, 'blue'๏ผ 2}๋ผ๋ ์ด๊น๊ฐ์ ์ฌ์ฉํ์ฌ Counter๋ฅผ ์์ฑ
- elements() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์์์ ๊ฐ์๋งํผ ๋ฆฌ์คํธํ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
- ํค์๋ ํํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ Counter๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
- → ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ ํค key๋ก, ์ค์ ๊ฐ์ ๊ฐvalue์ผ๋ก ํ์ฌ Counter๋ฅผ ์์ฑํ ์ ์์
»> from collections import Counter
»>
»> c = Counter(cats = 4, dogs = 8)
»> print(c)
Counter({'dogs'๏ผ 8, 'cats'๏ผ 4})
»> print(list(c.elements()))
['cats', 'cats', 'cats', 'cats', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs', 'dogs']
- ๊ธฐ๋ณธ ์ฌ์น์ฐ์ฐ ์ง์(ํ์ด์ฌ์์ ์ง์ํ๋ ๊ธฐ๋ณธ ์ฐ์ฐ์ธ ๋ง์ . ๋บ์ , ๋ ผ๋ฆฌ ์ฐ์ฐ ๋ฑ)
»> from collections import Counter
»>
»> c = Counter(a = 4, b = 2, c = 0, d = -2)
»> d = Counter(a = 1, b = 2, c = 3, d = 4)
»> c.subtract(d) # c - d
»> c
Counter({'a': 3, 'b'๏ผ 0, 'c'๏ผ -3, 'd'๏ผ -6})
- 2๊ฐ์ Counter c์ d๋ฅผ ์์ฑํ ํ c.subtract(d)๋ฅผ ์ํํ์ฌ c์ ๋ํ d์ ์ฐจ๋ฅผ ๊ตฌํ ๊ฒฐ๊ณผ
→ c์ ์๋ ๊ฐ ์์์ ๊ฐ์๊ฐ d์ ์๋ ์์์ ๊ฐ์๋งํผ ๊ฐ์ํจ
- ๋ง์ , AND, OR ์ฐ์ฐ ๋ชจ๋๋ฅผ ์ง์
»> from collections import Counter
»>
»> c = Counter(a = 4, b = 2, c = 0, d = -2)
»> d = Counter(a = 1, b = 2, c = 3, d = 4)
»> print(c + d)
Counter({'a': 5, 'b': 4, 'c'๏ผ 3, 'd': 2})
»> print(c & d)
Counter({'b'๏ผ 2, 'a'๏ผ 1})
»> print(c | d)
Counter({'a': 4, 'd'๏ผ 4, 'c': 3, 'b': 2})
namedtuple ๋ชจ๋
: ํํ์ ํํ๋ก ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- ์ด๋ค ํน์ ๋ฐ์ดํฐ๋ ์ ๋ง๋ค ๊ท์ ๋ ์ ๋ณด๊ฐ ์์
- ex) ํ์์ด๋ผ๋ ์ ๋ณด→ ์ปดํจํฐ์ ์ ์ฅํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๋ณ์(ํ๋ฒ, ์ด๋ฆ, ํ๋ , ํ๊ณผ ๋ฑ)๊ฐ ์์
- ์ด๋ฌํ ์ ๋ณด๋ฅผ ํ๋์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ์ด์ฐจ์ ๋ฆฌ์คํธ ํํ๋ก ๊ตฌ์ฑํด๋ ๋์ง๋ง, ๋์ค์๋ผ๋ ์ด ๋ฆฌ์คํธ๋ฅผ ๋ค๋ฅธ ์ฌ๋์ด ์ฌ์ฉํ๋ค๋ฉด ์์ธํ ์ ๋ณด๋ฅผ ๋ชจ๋ฅด๊ธฐ์ ์ฌ์ฉ์ด ์ด๋ ค์ธ ์ ์์
- (C ์ธ์ด์์๋ struct๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ)
- → ์ด๋ฌํ ์ ๋ณด๋ฅผ ํ๋์ ํํ ํํ๋ก ๊ตฌ์ฑํด ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๊ฐ namedtuple์
- ์ขํ ํ๋ฉด์์์ ์ ์ ์์น๋ฅผ ํํํ๊ธฐ ์ํด Point๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๊ฐ์ ์ ์ฅํ namedtuple
»> from collections import namedtuple
»>
»> Point = namedtuple('Point', ['x', 'y'])
»> p = Point(ll, y=22)
»> p
Point(x=ll, y=22)
»> p.x, p.y
(11, 22)
»> print(p[0] + p[1])
33
- Point = namedtuple(’Point', ['x', 'y']) ์ฝ๋์์ Point ๊ฐ์ฒด์ ์ด๋ฆ์ Point๋ก ์ง์ ํ๊ณ , ์ ์ฅ๋๋ ์์์ ์ด๋ฆ์ x์ y๋ก ์ง์ ํจ
- ๋ค์์ผ๋ก Point ๊ฐ์ฒด๋ฅผ ์์ฑํจ
- ์์ฑ์ ํจ์์ ๋น์ทํจ
- Point ๊ฐ์ฒด์์ x์ y๋ฅผ ๋ณ์๋ก ์ฌ์ฉํ๊ณ ์๊ณ ๊ฐ๊ฐ p = point(11, y=22)์์ ์ฐจ๋ก๋ก ์ฌ์ฉ๋์ด ๊ฐ์ ์ ์ฅํ ์ ์์
- ์ ๋ ฅ๋ ๊ฐ์ p ๋ณ์์ ์ ์ฅ
- ** p ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ํธ์ถํ๋ ๋ฐฉ๋ฒ **: p.x, p.y์ ๊ฐ์ด ๋ณ์๋ช ๊ณผ ์์์ ์ด๋ฆ์ ์ (.)์ผ๋ก ์ฐ๊ฒฐํ๋ฉด ํด๋น ๊ฐ์ ๋ถ๋ฌ๋ผ ์ ์์: ์ธ๋ฑ์ค๋ ์ด๋ฆ์ด ๋ค์ด๊ฐ ์์๋๋ก ๊ฐ์ด ์ ์ฅ๋์ด ์์→ p[1]์ Point ๊ฐ์ฒด์์ ๋ ๋ฒ์งธ๋ก ์ ์ฅ๋์ด์ผ ํ๋ y๊ฐ์ ๋์
- ⇒ ์ด๋ก ์ธํด ๋ง์ ์ฐ์ฐ์ด๋ ์ธํจํน ์ฐ์ฐ ๋ฑ์ด ๋ชจ๋ ๊ฐ๋ฅํด์ง
- → p[0]์ Point ๊ฐ์ฒด์์ ๋จผ์ ์ ์ฅ๋์ด์ผํ๋ x๊ฐ์ ๋์
- (2) ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- (1) ์์์ ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
CHAPTER011_๋ชจ๋๊ณผ ํจํค์ง
01_๋ชจ๋๊ณผ ํจํค์ง์ ์ดํด
- ํ์ด์ฌ → ๋งค์ฐ ๊ฐ๊ฒฐํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
- ๊ฐ์ฅ ํฐ ์ด์ → ๋ง์ ์ฌ๋๋ค์ด ์ด๋ฏธ ํ์ด์ฌ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํด๋์๊ธฐ ๋๋ฌธ
- ๋ชจ๋: ์ด๋ฏธ ์์ฑ๋ ํ๋ก๊ทธ๋จ
- ํจํค์ง: ์ด ํ๋ก๊ทธ๋จ์ ๋ฌถ์
๋ชจ๋์ ๊ฐ๋
- ๋ง์ ์ ํ๋ค์ ์ฌ๋ฌ ๋ถํ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋ชจ๋ํ๋์ด ํ๋งค๋๊ณ ์์
- ๋ํ์ ์ธ ์: ๋ ๊ณ ๋ธ๋ก
- ํ๋๋ง์ผ๋ก๋ ์ ํ์ด์ง๋ง, ๋ค๋ฅธ ๋ธ๋ก๊ณผ ์ฐ๊ฒฐ ๋ฐ ํฐ ๋ฐํ์ ์กฐ๋ฆฝํจ์ผ๋ก์จ ๊ฑฐ๋ํ ์ํ๋ ๋ง๋ค ์ ์์
- ์ด๋ ๋ ๊ณ ๋ธ๋ก ํ๋ํ๋๊ฐ ๋ฐ๋ก ๋ชจ๋
- ์๋์ฐจ ๋ถํ, ๋ฒฝ๋ ๋ฑ…
- ๋ํ์ ์ธ ์: ๋ ๊ณ ๋ธ๋ก
- ํ๋ก๊ทธ๋๋ฐ์์์ ๋ชจ๋: ์์ ํ๋ก๊ทธ๋จ ์กฐ๊ฐ
- ๊ฐ ๋ชจ๋ ์ญ์ ์ ๋ง๋ค ์ญํ ์ด ์์ด์ ์๋ก ๋ค๋ฅธ ๋ชจ๋๊ณผ ์ธํฐํ์ด์ค๋ง ์ฐ๊ฒฐ๋๋ฉด ์ฌ์ฉ ๊ฐ๋ฅ
- ์ธํฐํ์ด์ค: ํด๋น ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ชจ๋ ๊ฐ์ ์ฐ๊ฒฐ์ ์ํ ์ฝ์(ํจ์์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅํ๋ ์ฝ์)
- ๊ฐ ๋ชจ๋ ์ญ์ ์ ๋ง๋ค ์ญํ ์ด ์์ด์ ์๋ก ๋ค๋ฅธ ๋ชจ๋๊ณผ ์ธํฐํ์ด์ค๋ง ์ฐ๊ฒฐ๋๋ฉด ์ฌ์ฉ ๊ฐ๋ฅ
- → ํ๋ํ๋ ์ฐ๊ฒฐํด ์ด๋ค ๋ชฉ์ ์ ๊ฐ์ง ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํ ์์ ํ๋ก๊ทธ๋จ
- ๋ด์ฅ ๋ชจ๋: ํ์ด์ฌ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ชจ๋
- ๋ํ์ ์ผ๋ก random ๋ชจ๋
- random ๋ชจ๋์ ํธ์ถํ๊ธฐ ์ํ ์ฝ๋
»> import random »> random.randint(1, 1000) 198
- ์คํ→ 1~1000 ์ค ์์์ ์ซ์๊ฐ ์์ฑ
- → ๋์๋ฅผ ์ฝ๊ฒ ์์ฑ์์ผ ์ฃผ๋ ๋ชจ๋
- ๋ํ์ ์ผ๋ก random ๋ชจ๋
ํจํค์ง์ ๊ฐ๋
: ๋ชจ๋์ ๋ฌถ์
- from: ๋ชจ๋์ ํธ์ถํ๊ธฐ ์ํด ํจํค์ง๋ถํฐ ํธ์ถํ๋ ๋ช
๋ น์ด
→ ์ผ์ข ์ ๋๋ ํฐ๋ฆฌ์ฒ๋ผ ํ๋์ ํจํค์ง ์์ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋์ด ์๋๋ฐ, ์ด ๋ชจ๋๋ค์ด ์๋ก ํฌํจ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ฉฐ ๊ฑฐ๋ํ ํจํค์ง๋ฅผ ๋ง๋ฆ
02_๋ชจ๋ ๋ง๋ค๊ธฐ
๋ชจ๋ ๋ง๋ค๊ธฐ ์ค์ต
- ํ์ด์ฌ์์๋ .py ํ์ผ ์์ฒด๊ฐ ๋ชจ๋
- ๊ฐ์ฅ ์ฝ๊ฒ ํ์ด์ฌ ๋ชจ๋์ ๋ง๋๋ ๋ฐฉ๋ฒ→ ๋ค๋ฅธ ํ์ด์ฌ ํ์ผ์ด๋ ํ์ด์ฌ ์ ธ์์ import๋ฌธ์ ์ฌ์ฉํ์ฌ ํด๋น ๋ชจ๋์ ํจ์๋ฅผ ์ฝ๊ฒ ๋ถ๋ฌ๋ผ ์ ์์
- → ๋๋ ํฐ๋ฆฌ์์ .py ํ์ผ์ ํ๋ ๋ง๋ค๊ณ , ๊ทธ ํ์ผ์ ํ์ํ ํจ์๋ฅผ ์ ์ฅ
- ๊ฐ๋จํ ๋ชจ๋ ๋ง๋ค์ด ๋ณด๊ธฐ
- .py๋ก ์ ์ฅํด์ผ ํจ
- ๋ชจ๋ ๋ถ๋ฌ์ ์ฌ์ฉํด๋ณด๊ธฐ
- ** 1ํ์ import fah_converter ์ฝ๋ **→ ์ฆ .py ์์ฒด๊ฐ ํ๋์ ๋ชจ๋์ด ๋จ
- ๋ชจ๋: fah_converter
- fahrenheit = fah_converter.covert_c_to_f (celsius) ⇒ ํด๋น ๋ชจ๋ ์์ covert_c_to_f() ํจ์๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ธฐ ์ํจ
- (fah_converter.py์ module_ex.py๊ฐ ๊ฐ์ ๋๋ ํฐ๋ฆฌ ์์ ์์ด์ผ ๋ฌธ์ ์์ด ์คํ)
- → ๊ธฐ์กด์ ๋ง๋ ์ฝ๋ ํ์ผ์์ .py๋ฅผ ๋นผ๊ณ ํด๋น ํ์ผ์ ์ด๋ฆ๋ง ์ ๋ ฅํ๋ฉด ํ์ผ ๋ด์ ํจ์ ๋ถ๋ฌ์ ์ฌ์ฉ ๊ฐ๋ฅ
๋ค์์คํ์ด์ค
: ๋ชจ๋ ํธ์ถ์ ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ฒ
- ํ๋์ ๋ชจ๋ ์์ ํด๋์ค • ํจ์ • ๋ณ์ ์กด์ฌ→ import๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถ ๊ฐ๋ฅ
- but, ๋๋ก๋ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ ํจ์ ์ด๋ฆ๊ณผ ํธ์ถ๋ ๋ชจ๋์ ํจ์ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์กด์ฌ
- ์ค์ ๋๋ ๊ธฐ์กด ํด๋์ค๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ๋ค ๋ฐ์ํ ์ ์์
- but, ๋๋ก๋ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ ํจ์ ์ด๋ฆ๊ณผ ํธ์ถ๋ ๋ชจ๋์ ํจ์ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์กด์ฌ
- → ์ด๋ ์ฌ์ฉํ๋ ๊ฐ๋ ์ด ๋ฐ๋ก ๋ค์์คํ์ด์ค
- ๋ค์์คํ์ด์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
(1) ๋ชจ๋ ์ด๋ฆ์ ์๋ฆฌ์์ค(alias) ์์ฑ → ๋ชจ๋ ์์ผ๋ก ์ฝ๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ
- ์๋ฆฌ์์ค→ ์ผ์ข
์ ๋ณ์นญ์ผ๋ก ๋ชจ๋์ ์ด๋ฆ์ ๋ฐ๊ฟ ๋ถ๋ฅผ ๋ ์ฌ์ฉ
- ๋ชจ๋์ ์ด๋ฆ์ด ๋๋ฌด ๊ธธ๊ฑฐ๋ ๋ค๋ฅธ ์ฝ๋์ ํท๊ฐ๋ฆฌ๋ ์ด๋ฆ์ผ ๋ as ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ์ด๋ฆ์ ๊ฐ๋จํ๊ฒ ๋ฐ๊ฟ ์ฌ์ฉ
- ex)
1 import fah_converter as fah # ์ด์ ์ ๋ง๋ fah_converter๋ชจ๋์ fah๋ก ์ด๋ฆ ๋ณ๊ฒฝ ํ ํธ์ถ 2 print(fah.covert_c_to_f(41.6)) # fah_converter ๋ชจ๋ ์์ covert_c_to f() ํจ์ ํธ์ถ โ
→ ‘๋ชจ๋๋ช .ํจ์๋ช (๋๋ ํด๋์ค๋ช /๋ณ์๋ช )’์ ํํ๋ก ํด๋น ๋ชจ๋ ์ ํจ์, ํด๋์ค, ๋ณ์๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
(2) from ๊ตฌ๋ฌธ ์ฌ์ฉ→ ๋ชจ๋์์ ํน์ ํจ์ ๋๋ ํด๋์ค๋ง ํธ์ถํ๋ ๋ฐฉ๋ฒ
- ex)
1 from fah_converter import covert_c_to_f 2 print(covert_c_to_f(41.6)) โ
→ 1ํ์ฒ๋ผ ‘from ๋ชจ๋๋ช import ๋ชจ๋ ์์ ์๋ ํจ์๋ช ’์ ํํ๋ก ์์ฑํ๋ฉด ํด๋น ๋ชจ๋ ์์ ์๋ ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ
→ ๋ณ๋์ ๋ชจ๋๋ช ์ ์จ ์ฃผ์ง ์์๋ ํจ์์ ๋จ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํจ
→ ์ฃผ์ํ ์ ⇒ from์ ๊ผญ ๋ชจ๋์ ํธ์ถํ๊ธฐ ์ํ ํค์๋๊ฐ ์๋
→ ํจํค์ง ํธ์ถ ๋ฐ ํด๋น ํจํค์ง ์์ ์๋ ๋ชจ๋์ ํธ์ถํ ๋๋ ์ฌ์ฉ ๊ฐ๋ฅ
(3) ๋ณํ(*) ์ฌ์ฉ → ํด๋น ๋ชจ๋ ์์ ์๋ ๋ชจ๋ ํจ์, ํด๋์ค, ๋ณ์๋ฅผ ๊ฐ์ ธ์ด
- ‘from ๋ชจ๋๋ช
import ์’ ⇒ ํด๋น ๋ชจ๋ ์์ ์๋ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ฅผ ํธ์ถํ๋ค๋ ๋ป
1 from fah_converter import 2 print(covert_c_to_f(41.6)) โ
- ์ธ ๊ฐ์ง ์ค ๊ฐ์ฅ ์ ํธํ๋ ๋ฐฉ๋ฒ ⇒ ์๋ฆฌ์์ค๋ฅผ ์์ฑํ์ฌ ํธ์ถํ๋ ๋ฐฉ๋ฒ→ ์ฆ, ๊ฐ์ ํจ์๋ผ๋ covert_c_to_f๋ณด๋ค fah.covert_c_to_f๋ผ๊ณ ํ๊ธฐํ๋ ๊ฒ์ด ์ข์
- ⇒ ๊ฐ๊ฐ์ ํจ์ ๋ฐ ํด๋์ค๊ฐ ์ด๋์ ๋์ค๋ ์ง๋ฅผ ๋ช ํํ ํํํ๋ ๊ฒ์ด ์ข๊ธฐ ๋๋ฌธ
๋ด์ฅ ๋ชจ๋์ ์ฌ์ฉ
- ํ์ด์ฌ→ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฐ์ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ ๋ฌธ์ ์ฒ๋ฆฌ, ์น, ์ํ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ๋ด์ฅ ๋ชจ๋ ์ ๊ณต + ๋ณ๋ค๋ฅธ ์กฐ์น ์์ด import๋ฌธ ํ ์ค๋ก ์ฌ์ฉ ๊ฐ๋ฅ
(1) random ๋ชจ๋
: ๋์ ์์ฑ ๋ชจ๋
- ๋ชจ๋ ๊ตฌ์ฑ
- randint() ํจ์→ ์ ์ ๋ชจ๋ ์์ฑ
- random() ํจ์→ ์์์ ๋์ ์์ฑ
(2) time ๋ชจ๋
: ์ผ๋ฐ์ ์ผ๋ก ์๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ํ์ฌ ์๊ฐ์ ์๋ ค์ค(์๊ฐ๊ณผ ๊ด๋ จ)
→ ํ๋ก๊ทธ๋จ์ด ๋์ํ๋ ํ์ฌ ์๊ฐ์ ์ ์ ์์
(3) urllib ๋ชจ๋
: ์น๊ณผ ๊ด๋ จ →์น ์ฃผ์์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ด
- ๋ํ์ ์ผ๋ก request ๋ชจ๋์ ์ฌ์ฉ→ ํน์ URL์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์
- urllib.request.urlopen() → ๊ดํธ ์์ ํน์ ์น ์ฃผ์๋ฅผ ์ ๋ ฅ ์ ํด๋น ์ฃผ์์ HTML ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด
- ์ด์ธ์๋ ๋ง์ ํ์ด์ฌ ๋ชจ๋ ์กด์ฌ
- ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ→ ๊ตฌ๊ธ์์ ๊ฒ์(ํนํ ์์ด๋ก ๊ฒ์)
- ex) ํ๋ก๊ทธ๋๋ฐ ์ํ์ ๊ฑธ๋ฆฐ ์๊ฐ์ ์์๋ด๋ ๋ชจ๋์ ์ฐพ๊ณ ์ถ์ ๋
- ์ฐ๋ฆฌ๋๋ผ์ ๋ํ ์ฌ์ดํธ์ธ ํ์ด์ฌ ์ฝ๋ฆฌ์์ ๋ฌธ์
- → ํ์ด์ฌ ์ฝ๋ฆฌ์์ ํ์ด์ค๋ถ ํ์ด์ง→ ํ์ด์ฌ ๊ฐ๋ฐ์์๊ฒ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ํ์ ์ธ ์ปค๋ฎค๋ํฐ
- → ๊ฒ์์ด ์ ๋ ฅ
- python time module run time
- →์ด ๋ชจ๋๋ค์ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๋ฒ
03_ํจํค์ง ๋ง๋ค๊ธฐ
ํจํค์ง์ ๊ตฌ์ฑ
- ํจํค์ง: ํ๋์ ๋ํ ํ๋ก์ ํธ๋ฅผ ์ํํ๊ธฐ ์ํ ๋ชจ๋์ ๋ฌถ์
- ๋ชจ๋ ๊ตฌ์ฑ
- ํ๋์ ํ์ผ๋ก ์ด๋ฃจ์ด์ง
- ํจํค์ง ๊ตฌ์ฑ
- ํ์ผ์ด ํฌํจ๋ ๋๋ ํฐ๋ฆฌ(ํด๋)๋ก ๊ตฌ์ฑ
- ⇒ ํจํค์ง : ์ฌ๋ฌ ๊ฐ์ .py ํ์ผ์ด ํ๋์ ๋๋ ํฐ๋ฆฌ์ ๋ค์ด๊ฐ ์๋ ๊ฒ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ ํ๋ก๊ทธ๋จ์ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๊ฒ
- ํ์ด์ฌ์์๋ ํจํค์ง๊ฐ ํ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ํจํค์ง์ ์์ฝ์ด
- ์ฃผ์ํ ์ → ํ์ผ๋ช ์์ฒด๊ฐ ์์ฝ์ด๋ฅผ ๋ฐ๋์ ์ง์ผ์ผ๋ง ์คํ๋๋ ๊ฒฝ์ฐ ์กด์ฌ
ํจํค์ง ๋ง๋ค๊ธฐ ์ค์ต
- ์ธํฐ๋ท์์ ์ฃผ์ ์ ๋ณด๋ฅผ ๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ , ํ์ํ ์ ๋ณด๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ
- 1 ๋จ๊ณ: ๋๋ ํฐ๋ฆฌ ๊ตฌ์ฑํ๊ธฐ
- ํจํค์ง ์ด๋ฆ→ ‘roboadvisor’(ํจํค์ง ์ด๋ฆ ๋๋ถ๋ถ์ ์๋ฌธ์๋ฅผ ์ฌ์ฉ)
- roboadvisor์ ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ด ์๋ค๊ณ ๊ฐ์ (2) database(๋ฐ์ดํฐ๋ฒ ์ด์ค): ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๊ธฐ๋ฅ
- (3) analysis(๋ถ์): ํด๋น ์ ๋ณด๋ฅผ ๋ถ์ํ์ฌ ์๋ฏธ ์๋ ๊ฐ์ ๋ฝ์๋ด๋ ๊ธฐ๋ฅ
- (1) crawling(ํฌ๋กค๋ง): ์ฃผ์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ธํฐ๋ท์์ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ
- ํจํค์ง๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ ์ฒซ ๋ฒ์งธ ๋จ๊ณ→ ๊ฐ ํจํค์ง ๋ด์์ ๋ค์ ์ธ๋ถ ํจํค์ง์ ๋ง์ถฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ตฌ์ฑ
- ๋จผ์ cmd์ฐฝ์ ๋ค์ ๋ช
๋ น์ ์
๋ ฅํ์ฌ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑ
- ๋จผ์ cmd์ฐฝ์ ๋ค์ ๋ช
๋ น์ ์
๋ ฅํ์ฌ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑ
- cmd์ฐฝ์์ ๋ง๋ ๋๋ ํฐ๋ฆฌ๊ฐ ๊ตฌ์ฑ
- 2๋จ๊ณ: ๋๋ ํฐ๋ฆฌ๋ณ๋ก ํ์ํ ๋ชจ๋ ๋ง๋ค๊ธฐ
- ํ๋์ ํจํค์ง→ ์ค์ฒฉ๋ ๊ตฌ์กฐ๋ก ๋ง๋ค ์ ์์ผ๋ฏ๋ก ํจํค์ง ์์ ๋ ํ๋์ ํจํค์ง๊ฐ ๋ค์ด๊ฐ ์ ์์⇒ **init**.py: ๊ฐ ๋๋ ํฐ๋ฆฌ๊ฐ ํจํค์ง์์ ๋ํ๋ด๋ ์์ฝ ํ์ผ
- but, ๊ฐ๊ฐ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ํ๋์ ํจํค์ง๋ก ์ ์ธํ๊ธฐ ์ํด์๋ ์์ฝ๋ ํ์ผ์ ๋ง๋ค์ด์ผ ํจ
- **init**.py: ๊ฐ ๋๋ ํฐ๋ฆฌ๊ฐ ํจํค์ง์์ ๋ํ๋ด๋ ์์ฝ ํ์ผ
- ๊ธฐ๋ณธ .py ๋ชจ๋ ํ์ผ๊ณผ ํจ๊ป ๊ฐ ๋๋ ํฐ๋ฆฌ์ **init**.py๋ฅผ ์ถ๊ฐ→ ํจํค์ง์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง
- ๊ฐ๊ฐ์ ๋๋ ํฐ๋ฆฌ ์์ .py ํ์ผ์ ๋ง๋ค์ด ๊ตฌ์ฑ
- ๊ฐ ํ์ ํจํค์ง ํฌํจ๋ ๋ชจ๋์ ํ์ํ ๊ธฐ๋ฅ์ ๊ตฌํ
- analysis ๋๋ ํฐ๋ฆฌ
1 def series_test()๏ผ 2 print("series")
1 def statics_test()๏ผ 2 print("statics")
- analysis ๋๋ ํฐ๋ฆฌ
- ์ค์ ์ฌ์ฉ→ ํ์ด์ฌ ์ ธ์ ์ ๋ ฅ
→ roboadvisor์ ์์ ๋๋ ํฐ๋ฆฌ์์ ํ์ด์ฌ ์ ธ์ ์คํํด์ผ ์ ์์ ์ผ๋ก ์ํ»> from roboadvisor.analysis import series »> series.series_test() series
- ์ฝ๋ ์คํ
- ํด๋น ํ๋ก๊ทธ๋จ์ด ์๋๋ ๋ ์ฌ์ฉํ๊ธฐ ์ํ ๋ชจ๋๋ค์ ์ปดํ์ผ ๊ฒฐ๊ณผ ์ ์ฅ
- ํ ๋ฒ pycache’๋๋ ํฐ๋ฆฌ๊ฐ ์์ฑ๋๋ฉด ๊ทธ ์์ ์์ ํด๋น ๋ชจ๋์ ์์ ํด๋ ๊ฒฐ๊ณผ ๋ฐ์ X
- ํด๋น ํ๋ก๊ทธ๋จ ๋๋ ํ์ด์ฌ ์ ธ์ด ์์ ํ ์ข ๋ฃํ ํ ์์ ํด์ผ ํด๋น ๋ชจ๋์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์๋จ
- → roboadvisor ๋๋ ํฐ๋ฆฌ ์์ ‘pycache****’๋๋ ํฐ๋ฆฌ ์์ฑ
- 3๋จ๊ณ: ๋๋ ํฐ๋ฆฌ๋ณ๋ก__ init__.py ๊ตฌ์ฑํ๊ธฐ
- __init__: ํด๋น ๋๋ ํฐ๋ฆฌ๊ฐ ํ์ด์ฌ์ ํจํค์ง๋ผ๊ณ ์ ์ธํ๋ ์ด๊ธฐํ ์คํฌ๋ฆฝํธ
- ์ผ๋ฐ์ ์ผ๋ก **init**.py ํ์ผ์๋ ๋ค์๊ณผ ๊ฐ์ด ํด๋น ํจํค์ง๊ฐ ํฌํจ๋ ๋ชจ๋์ ๊ดํ ์ ๋ณด๊ฐ ์กด์ฌ
- roboadvisor ๋๋ ํฐ๋ฆฌ์ 3๊ฐ์ ํ์ ํจํค์ง analysis, crawling, database๊ฐ ์กด์ฌ
- ์ด ๊ฐ๊ฐ์ ํจํค์ง๋ฅผ _ init__.py ์์ __all__๊ณผ import๋ฌธ์ ์ฌ์ฉํด ์ ์ธ
- __all__์ด๋ผ๋ ๋ฆฌ์คํธํ์ ๋ณ์๋ฅผ ๋ง๋ค์ด ์ฐจ๋ก๋๋ก ํ์ ํจํค์ง์ ์ด๋ฆ์ ์
๋ ฅํ๊ณ , ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ ํ์ ํจํค์ง๋ฅผ import๋ฌธ์ผ๋ก ํธ์ถ
- 4๋จ๊ณ: main_.py ํ์ผ ๋ง๋ค๊ธฐ
- ํจํค์ง๋ฅผ ํ ๋ฒ์ ์ฌ์ฉํ๊ธฐ ์ํด roboadvisor ๋๋ ํฐ๋ฆฌ์ **main.**py ํ์ผ์ ๋ง๋ฆ
- main.py ํ์ผ์ ๋ง๋๋ ์ด์ → ํจํค์ง ์์ฒด๋ฅผ ์คํํ๊ธฐ ์ํจ
- ํ์ผ ๊ตฌ์ฑ(2) if **name** ==’main’๊ตฌ๋ฌธ ์๋์ ์ค์ ์คํ ์ฝ๋๋ฅผ ์์ฑ
- (1) ๊ธฐ๋ณธ์ ์ผ๋ก ํธ์ถํด์ผ ํ๋ ์ฌ๋ฌ ๋ชจ๋์ from๊ณผ import๋ฌธ์ผ๋ก ํธ์ถ
- 5๋จ๊ณ: ์คํํ๊ธฐ(ํจํค์ง ์ด๋ฆ๋ง ํธ์ถ๏ผ
- ๋ชจ๋ ์ฝ๋๋ฅผ ์์ฑํ ํ ํด๋น ํจํค์ง์ ์ต์์ ๋๋ ํฐ๋ฆฌ์์ ‘python ํจํค์ง๋ช '์ ์ ๋ ฅํ์ฌ ์คํ
python roboadvisor series parser
ํจํค์ง ๋ค์์คํ์ด์ค
: ํจํค์ง ๋ด์์ ๋ชจ๋์ ์๋ก ํธ์ถํ ๋ ์ฌ์ฉ
- ๋ชจ๋๊ณผ ๋ฌ๋ฆฌ ํจ์ฌ ๋ ๋ง์ ์ค๊ฐ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์กฐ๊ธ ๋ณต์กํจ
- ์ข
๋ฅ
- ์ ๋ ์ฐธ์กฐ: ์ ์ฒด ํจํค์ง์ ๊ตฌ์กฐ๋ฅผ ์๊ฐํด ๋ชจ๋์ ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ํธ์ถํ๋ ๊ฒ
- ์๋ ์ฐธ์กฐ: ํธ์ถํ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ํธ์ถํ๋ ๊ฒ
- ์ ๋ ์ฐธ์กฐ
- ํจํค์ง ์ด๋ฆ-series๊น์ง ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ
→ ‘from ์ ์ฒด ํจํค์ง.์๋ธ ํจํค์ง import ๋ชจ๋’ ํ์
- ์๋ ์ฐธ์กฐ
- ํต์ฌ→ ํ์ฌ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ชจ๋์ ํธ์ถํ๋ ๊ฒ
04_๊ฐ์ํ๊ฒฝ ์ฌ์ฉํ๊ธฐ
๊ฐ์ํ๊ฒฝ์ ๊ฐ๋
: ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ๋ง๋ ํจํค์ง๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ๊ฐ ํ๋ก์ ํธ์ ๋ง๋ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์ ์ค์ ํ๋ ๊ฒ์ด ์ข์
- ex. ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ํ๋ก์ ํธ / ์น ๋ค๋ฃจ๋ ํ๋ก์ ํธ → ์ฑ๊ฒฉ์ด ๋งค์ฐ ๋ค๋ฆ
- ํ์ด์ฌ → ์ด๋ฐ ๊ฒฝ์ฐ ์ง์์ ์ํด ๊ฐ์ํ๊ฒฝ์ด๋ผ๋ ๊ฐ๋ ์ผ๋ก ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ ์ ๊ณต
- ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ ํธ ์ํํ ๋
- ์ฝ๋ ์ํํ ๊ธฐ๋ณธ ์ธํฐํ๋ฆฌํฐ
- ํ๋ก์ ํธ๋ณ๋ก ํ์ํ ์ถ๊ฐ ํจํค์ง๊น์ง ์ค์น ⇒ ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ ์ํฅ ์ฃผ์ง ์๋๋ก ๋ ๋ฆฝ์ ์ธ ํ๋ก์ ํธ ์ํ ํ๊ฒฝ์ ๊ตฌ์ฑํ ์ ์๋๋ฐ ์ด๋ฅผ ๊ฐ์ํ๊ฒฝ์ด๋ผ๊ณ ํจ
- ๋ํ์ ์ธ ๊ฐ์ํ๊ฒฝ ๋๊ตฌ
- virtualenv
- ํ์ด์ฌ ๊ธฐ๋ณธ ์ ๊ณต ๊ฐ์ํ๊ฒฝ ๋๊ตฌ
- pip ์ด์ฉํ์ฌ ์๋ก์ด ํจํค์ง ์ค์น ๊ฐ๋ฅ
- conda
- miniconda์ ์ ์ฉ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ
- ๊ฐ์ํ๊ฒฝ ๊ด๋ฆฌ + ํจํค์ง ์ค์น
- virtualenv
๊ฐ์ํ๊ฒฝ ์ค์ ํ๊ธฐ
(1) ๊ฐ์ํ๊ฒฝ ๋ง๋ค๊ธฐ
- ๋จผ์ ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ cmd ์ฐฝ์ ์
๋ ฅ
conda create -n my_project python=3.4 โ
- conda: ์คํ ๋ช ๋ น์ด
- create: ๊ฐ์ํ๊ฒฝ์ ๋ง๋๋ ์ธ์
- -n: name์ ์ค์๋ง
- my_project: ๊ตฌ์ฑํ ๊ฐ์ํ๊ฒฝ ์ด๋ฆ
- python=3.4: ์ค์น๋๋ ํ์ด์ฌ์ ๋ฒ์
⇒ ‘my_project๋ผ๋ ์ด๋ฆ์ ๊ฐ์ํ๊ฒฝ์ python 3.4 ๋ฒ์ ์ผ๋ก ๋ง๋ค์ด๋ผ.’
- ๋ช ๋ น ์คํ→ ‘Proceed (๏ผปy๏ผฝ/n)?’์์ y ์ ๋ ฅ→ ์ค์น ์์
(2) ๊ฐ์ํ๊ฒฝ ์คํํ๊ธฐ
- ์คํ ๋ฐฉ๋ฒ→ ๊ฐ์ํ๊ฒฝ์ ๋ง๋ค๋ฉด ๋ํ๋๋ ํ๋ฉด์์ ์ค๋ช
ํด์ค
⇒ my_project๋ผ๋ ๊ฐ์ํ๊ฒฝ์ ํ์ฑํํ๋ผ๋ ์๋ฏธ
- [activate ๊ฐ์ํ๋ฉด ์ด๋ฆ]
- →์ด์ ๋ถํฐ ํด๋น ๊ฐ์ํ๊ฒฝ์ ์ธํฐํ๋ฆฌํฐ๋ง ์คํ๋จ
- ‘where python’์ ๋ ฅ→ ํ์ฌ ์คํ๋๋ ํ์ด์ฌ์ ์์น ์ถ๋ ฅ
- ‘deactivate’ ์ ๋ ฅ→ ์คํ๋ ๊ฐ์ํ๊ฒฝ ์ข ๋ฃ
(3) ๊ฐ์ํ๊ฒฝ ํจํค์ง ์ค์นํ๊ธฐ
- ํ์
- [conda install ์ค์นํ ํจํค์ง ์ด๋ฆ]
- matplotlib
- ๊ทธ๋ํ ๊ด๋ฆฌ ํจํค์ง
(4) ๊ฐ์ํ๊ฒฝ ํจํค์ง ์ค์ตํ๊ธฐ
- matplotlib ์ค์ต