๋ฐ์ดํฐ ๊ณผํ์ ์ํ ํ์ด์ฌ ํ๋ก๊ทธ๋๋ฐ ๊ต์ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ๊ฐ์์๋ฃ์ ๋๋ค.
์๋ฃ๊ตฌ์กฐ์ ๊ฐ๋
๋ค์ํ ํํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ
๋ฐ์ดํฐ ์ ์ฅ ์ฌ๋ก : ์ ํ๋ฒํธ๋ถ
- ๊ณผ๊ฑฐ : “Yellow Page”๋ผ๋ ๋๊บผ์ด ์ ํ๋ฒํธ๋ถ์์ ์ ํ๋ฒํธ ๊ฒ์
- ํ์ฌ๋ ์ ํ๋ฒํธ๋ถ๋ฅผ ์ฌ์ฉํ๋ ์ผ์ด ์์ง๋ง ์ ํ๋ฒํธ๋ถ์์ ์ ํ๋ฒํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ๊ธฐ ์ํด์ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๋๋ค ์์๋๋ก ์ ์ฅ๋์ด ์๋ ๋ฐฉ์์ด ์ง๊ธ๋ ์ฌ์ฉ๋๋ค.
- ๋ฐ์ดํฐ ํน์ง์ ๊ณ ๋ คํ์ฌ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ํจ
์ค์ํ์์ ๋ฐ์ดํฐ์ ํน์ง์ ๋ฐ์ํ์ฌ ์ ์ฅํด์ผ ํ ์ ๋ณด
- ์ํ์ ๋ฒํธํ๋ ๋ฒํธํ ๋จ๋ง๊ธฐ์์ ์ฌ์ฉ์๊ฐ ๋ฒํธํ๋ฅผ ํ๋์ฉ ๋ฝ์ผ๋ฉด ๋๊ธฐ ์ธ์์ด 1์ฉ ์ฆ๊ฐํ๊ณ , ํด๋น ์ฌ์ฉ์๊ฐ ์ํ ์๋น์ค ์ด์ฉ์ ์ข ๋ฃํ๋ฉด 1์ฉ ๊ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ฒํธํ์ ๋ฒํธ ์ ๋ณด์ ํ์ฌ ๋๊ธฐ ์ธ์์ ๋ชจ๋ ๊ด๋ฆฌํด์ผ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ ๊ด๋ฆฌ ๊ฐ๋ฅ
- ํ๋ฐฐ ์ํ๋ฌผ์ ํธ๋ญ์ ์์ ๋ ์์น ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ ์ง์ ๋ํ ๊ฒ
- ๋์ค์ ๋ฐฐ๋ฌํ๋ ์ํ๋ฌผ์ผ์๋ก ํธ๋ญ ์์ชฝ์ ์๊ณ , ๋จผ์ ๋ฐฐ๋ฌํ๋ ์ํ๋ฌผ์ผ์๋ก ํธ๋ญ ์ ๊ตฌ์ชฝ์ ์๋ ๊ฒ์ด ์ข์
๐ก ์๋ฃ๊ตฌ์กฐ๋ ํน์ง์ด ์๋ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ ์ผ๋ก ์ ์ฅ ๋ฐ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ค. ํนํ ๋์ฉ๋์ผ์๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋นจ๋ฆฌ ์ ์ฅํ๊ณ ๊ฒ์ํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํด์ผ ์คํ ์๊ฐ์ ์ค์ผ ์ ์๋ค.
ํ์ด์ฌ์์์ ์๋ฃ๊ตฌ์กฐ
์๋ฃ๊ตฌ์กฐ๋ช ํน์ง
์คํ(stack) | ๋์ค์ ๋ค์ด์จ ๊ฐ์ด ๋จผ์ ๋๊ฐ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฃ๊ตฌ์กฐ(last in first out) |
ํ(queue) | ๋จผ์ ๋ค์ด์จ ๊ฐ์ด ๋จผ์ ๋๊ฐ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฃ๊ตฌ์กฐ(first in first out) |
ํํ(tuple) | ๋ฆฌ์คํธ์ ๊ฐ์ง๋ง ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ํ์ฉํ์ง ์๋ ์๋ฃ๊ตฌ์กฐ |
์ธํธ(set) | ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์๊ณ , ์ํ์ ์งํฉ ์ฐ์ฐ์ ์ง์ํ๋ ์๋ฃ๊ตฌ์กฐ |
๋์ ๋๋ฆฌ (dictionary) | ์ ํ๋ฒํธ๋ถ์ ๊ฐ์ด ํค(key)์ ๊ฐ(value)์ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ ์ฌ๊ธฐ์ ํค๊ฐ ์ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์์ |
collections ๋ชจ๋ | ์์ ์ด๊ฑฐ๋ ์ฌ๋ฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ ํ์ด์ฌ ๋ด์ฅ(built-in) ๋ชจ๋ |
์คํ
- ์คํ (stack) ์ ์ปดํจํฐ๊ณตํ๊ณผ ํ์๋ค์ด ์ ๊ณต์ ์์ํ๋ฉด์ ์ฒ์ ๋ฐฐ์ฐ๋ ์๋ฃ๊ตฌ์กฐ๋ก, ์๋ฃ๊ตฌ์กฐ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋์ด๋ค.
- ์คํ์ ๊ฐ๋จํ ํํํ๋ฉด 'Last In First Out'์ผ๋ก ์ ์ํ ์ ์๋ค. ์ฆ, ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ค๋ ํํ๋ก ๋ฐ์ดํฐ์ ์ ์ฅ ๊ณต๊ฐ์ ๊ตฌํํ๋ ๊ฒ์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์คํ์ด๋ผ๊ณ ํ๋ฉด ๋ฐ์ ์ฌ์ง๊ณผ ๊ฐ์ด ์ฌ๊ฐํ์ ์ ์ฅ ๊ณต๊ฐ์ ๋ปํ๋ค. ์ฆ 4.10๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ผ๋ก ๋ฆฌ์คํธ์ ๋น์ทํ์ง๋ง ์ ์ฅ ์์๊ฐ ๋ฐ๋๋ ํํ๋ฅผ ์คํ ์๋ฃ๊ตฌ์กฐ (stack data sructure) ๋ผ๊ณ ํ๋ค.
- ์คํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ํธ์ push, ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๊ฒ์ ํ(pop)์ด๋ผ๊ณ ํ๋ค.
์คํ์ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ ์ ์์๊น?
- ํ๋ฐฐ ์ํ๋ฌผ์ ์ ์ฅํ๋ ๋ฐฉ์ : ๋จผ์ ๋ฐฐ๋ฌํด์ผ ํ๋ ์ํ๋ฌผ์ ํธ๋ญ์ ์ ๊ตฌ์ชฝ์, ๋์ค์ ๋ฐฐ๋ฌํด์ผ ํ๋ ์ํ๋ฌผ์ ํธ๋ญ์ ์์ชฝ์ ๋ฃ์ด์ผ ํ๋ค.
- ์ํ๋ฌผ์ ํ๋์ ๋ฐ์ดํฐ๋ก ๋ณธ๋ค๋ฉด ๋จผ์ ๋ค์ด๊ฐ ์ํ๋ฌผ๋ณด๋ค ๋์ค์ ๋ค์ด๊ฐ ์ํ๋ฌผ์ด ๋จผ์ ๋์์ผ ํ๋ ๊ฒฝ์ฐ์ด๋ค. ์ํ๋ฌผ๊ณผ ๋น์ทํ ๊ฐ๋ ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ ์ฅํ์ ๋ ์ข ๋ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์๋ค.
ํ์ด์ฌ์์์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ ์คํ ๊ตฌํ
- ๋ฆฌ์คํธ๋ก ์ ์ฅ ๊ณต๊ฐ์ ๋ง๋ ํ append() ํจ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ (push) ํ๊ณ pop() ํจ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ (pop) ํ๋ค.
>>> 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.ัะพั()
20
>>> a.pop()
10
- ๋ณ์ a์ [1, 2, 3, 4, 5]๊ฐ ํ ๋น๋๋ค.
- ๋ณ์ a์ 10๊ณผ 20์ ์ถ๊ฐํ๋ฉด ๋ณ์ a์๋ [1, 2, 3, 4, 5, 10, 20]์ด ํ ๋น๋๋ค.
- ๋ค์์ผ๋ก pop() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฅ ๋ง์ง๋ง์ ์ ์ฅ๋ ๊ฐ์ ์ถ์ถํ๊ณ ๋์์ ๋ฆฌ์คํธ์์ ์ญ์ ์ํจ๋ค. ์ฆ, pop() ํจ์๋ฅผ ์ฒ์ ์คํํ๋ฉด ๊ฐ์ฅ ๋ง์ง๋ง์ ์ ์ฅ๋ 20์ด ์ถ์ถ๋๋ฉด์ ํ๋ฉด์ ์ถ๋ ฅ๋๊ณ , ๋์์ ๋ณ์ a์ ๊ฐ์ [1, 2, 3, 4, 5,10] ์ผ๋ก ๋ฐ๋๋ค.
- ๋ค์ pop() ํจ์๋ฅผ ์คํํ๋ฉด ๋ง์ง๋ง์ ์ ์ฅ๋ 10์ด ์ถ์ถ๋๋ฉด์ ํ๋ฉด์ ์ถ๋ ฅ๋๊ณ , ๋์์ ๋ณ์ a์ ๊ฐ์ [1, 2, 3, 4, 5]๋ก ๋ฐ๋๋ค.
[์ฐธ๊ณ ]
์ฌ์ค ํ์ด์ฌ์์๋ ํจ์ฌ ๋ ํจ์จ์ ์ด๊ณ ๊ฐ๋ ฅํ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค. collections๋ผ๋ ๋ชจ๋์ด ์๋๋ฐ ์ด ๋ชจ๋์์ deque๋ฅผ ํตํด ์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ ์คํ์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ์ ์๋ค.
์คํ์ผ๋ก ๋ง๋ค ์ ์๋ ํ๋ก๊ทธ๋จ
- ์ ๋ ฅํ ํ ์คํธ๋ฅผ ์ญ์์ผ๋ก ์ถ์ถํ๋ ํ๋ก๊ทธ๋จ
word = input("Input a word: ")
world_list = list(word)
print(world_list)
result = []
for _ in range(len(world_list)):
result.append(world_list.pop())
print (result)
print(word[::-1])
์ ๋ต
Input a word: PYTHON * ์ฌ์ฉ์ ์
๋ ฅ(PYTHON)
['P', 'Y', 'T', 'H', 'O', 'N']
['N', 'O', 'H', 'T', 'Y', 'P']
NOHTYP
- ์ ๋ ฅํ ํ ์คํธ๋ ๋ณ์ word์ ์ ์ฅ๋๊ณ ๊ทธ ๊ฐ์ ๋ฆฌ์คํธํ์ผ๋ก ๋ณํํ๋ค.
- ๊ทธ ํ ๊ฐ์ ์ฐจ๋ก๋๋ก ์ถ์ถํ๋ฉด ์ ๋ ฅํ ํ ์คํธ์ ์ญ์๊ฐ์ด ์ถ๋ ฅ๋๋ค.ํ์ด์ฌ์์ ๊ต์ฅํ ๋ง์ด ์ฐ์ด๋ ์ฝ๋ ์ค ํ๋์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก for๋ฌธ์์ ๋ง์ด ์ฐ์ด๋๋ฐ, for๋ฌธ์ _ ๊ธฐํธ๊ฐ ์์ผ๋ฉด ํด๋น ๋ฐ๋ณต๋ฌธ์์ ์์ฑ๋๋ ๊ฐ์ ์ฝ๋์์ ์ฌ์ฉํ์ง ์๋๋ค๋ ๋ป์ด๋ค. ์์ ์ฝ๋์์๋ 6ํ์ range(len (world_List))์์ ์์ฑ๋๋ ๊ฐ์ ๋ฐ๋ณต๋ฌธ ๋ด์์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ํ ๋น๋ฐ์ ๊ฒ์ด๋ค.
ํ
- ์คํ์ ๋ฐ๋ ๊ฐ๋
- ํqucuc๋ ์คํ๊ณผ ๋ค๋ฅด๊ฒ ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ 'Fist in First Out'์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ์์์ ๋งํ๊ฒ์ฒ๋ผ ์ํ์์ ๋๊ธฐ ๋ฒํธํ๋ฅผ ๋ฝ์ ๋ ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด ๋ํ์ ์ธ ์ฌ๋ก์ด๋ค. ๋จผ์ ์จ ์ฌ๋์ด ์์ ๋ฒํธํ๋ฅผ ๋ฝ๊ณ , ๋ฒํธ๊ฐ ๋น ๋ฅธ ์ฌ๋์ด ๋จผ์ ์๋น์ค๋ฅผ ๋ฐ๋ ๊ตฌ์กฐ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ฐ๋
- ๋ฉ๋ชจ๋ฆฌ ๊ฐ๋ ์ผ๋ก ๋ณผ ๋ ํ๋ ์คํ๋ณด๋ค ๊ตฌํ์ด ์กฐ๊ธ ๋ ๋ณต์กํ๋ค.
- ์คํ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ํ๋ ์ง์ ์ด ๊ณ ์ ๋์ด ์์ง๋ง. ํ๋ ์ฒ์์ ๊ฐ์ด ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๊ฐ์ด ์ฌ์ฉ๋จ์ ๋ฐ๋ผ ๊ณ์ ๋ฐ๋๊ฒ ๋์ด ๊ตฌํ์ ์ข ๋ ์ ๊ฒฝ์ ์จ์ผ ํ๋ค. ํ์ด์ฌ์์๋ ์ด๋ฌํ ๋ถ๋ถ์ด ์๋์ผ๋ก ๊ตฌํ๋๋ฏ๋ก ์ด๋ ต์ง ์๊ฒ ์ฌ์ฉํ ์ ์๋ค.
- ํ์ด์ฌ์์ ํ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ์ ๊ตฌํ๊ณผ ๊ฐ์๋ฐ, pop() ํจ์๋ฅผ ์ฌ์ฉํ ๋ ์ธ๋ฑ์ค๊ฐ 0๋ฒ์งธ์ธ ๊ฐ์ ์ด๋ค๋ ์๋ฏธ๋ก pop(0)์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ฆ, pop() ํจ์๊ฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๊ฐ์ ๊ฐ์ ธ์จ๋ค๊ณ ํ์ ๋ pop(0)์ ๋งจ ์ฒ์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค๋ ๋ป์ด๋ค.
>>> 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.ัะพั(0)
1
>>> a.pop (0)
2
+๋ํ
ํ์ ์คํ์ด ํผํฉ๋ ๊ฐ๋ ์ด๋ค.
์, ๋ค ์๋ฐฉํฅ์์ push์ pop์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
๊ฐ์ฅ ๋จผ์ ๋ฃ์ ์๋ฃ๋ถํฐ ๊บผ๋ผ ์๋ ์๊ณ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ฃ์ ์๋ฃ๋ถํฐ ๊บผ๋ผ ์๋ ์๋ ๋ฐฉ์์ด๋ค.
ํํ
- ๋ฆฌ์คํธ์ ๊ฐ์ ๊ฐ๋ ์ด์ง๋ง ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ๋ฆฌ์คํธ
>>> 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)๊ณผ ๊ฐ์ ํํ ๋ก ์ ์ธํ๋ค.
- ๋๊ดํธ []๋ฅผ ์ด์ฉํ๋ ๋ฆฌ์คํธ์๋ ์ฐจ์ด๊ฐ ์๋ค. ํ์ง๋ง ์ ์ธ ์ธ์ ์ฌ๋ฌ ๊ฐ์ง ์ฐ ์ฐ์ ๋ฆฌ์คํธ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฆฌ์คํธ์์ ์ฌ์ฉํ๋ ์ฐ์ฐ, ์ธ๋ฑ์ฑ, ์ฌ๋ผ์ด์ฑ์ด ๋ชจ๋ ๋์ผํ๊ฒ ์ ์ฉ๋๋ค.
- ํํ ๊ฐ์ ๋ง์ t + t ๋ ๊ณฑ์ t * 2, ๊ทธ๋ฆฌ๊ณ len() ํจ์์ ๊ฐ์ด ๋ฆฌ์คํธํ ๋ฐ์ดํฐ์ ์ฌ์ฉํ๋ ๋ชจ๋ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ํํ๊ณผ ๋ฆฌ์คํธ์ ์ฐจ์ด์ ์ด ์๋ค๋ฉด, ํํ์ ๊ฐ์ ๋ง์๋๋ก ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋ง์ฝ ํํ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
>>> t[1]=5
Traceback (most recent call last):
File "stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
TypeError: 'tuple' object does not support item assignment
→ ํํ ์ค๋ธ์ ํธ(uple' obiect)์๋ ์๋ก์ด ์์ดํ (item)์ ํ ๋น์ ํ์ฉํ์ง ์๋๋ค.' ๋ผ๋ ๋ด์ฉ
๋ง์ฝ, ๊ฐ์ด ํ๋์ผ๋์ ํํ ์ ์ธ ๋ฐฉ๋ฒ
t= (1)๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๊ฐ๋ ์ ์์ง๋ง ํ์ด์ฌ์ ์ด๋ ๊ฒ ์ ์ธํ ๊ฒฝ์ฐ 1 = 1๋ก ์ดํดํ๋ค. ์ธํฐํ๋ฆฐํฐ๊ฐ ๊ทธ๋ ๊ฒ ์ค๊ณ ๋์ด ์๊ธฐ ๋๋ฌธ์ t= (5 + 2) * 2์ ๊ฐ์ด ์ฐ์ฐ์์ ์ฌ์ฉํ๋ ๊ดํธ๋ก ์ดํดํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ์ด ํ๋์ผ ๋๋ t= (1. )์ ๊ฐ์ด ๋ฐ๋์ ์ฝค๋ง(.)๋ฅผ ๋ถ์ฌ t๊ฐ ํํ์์ ์ ์ธํด์ผ ํ๋ค.
์ด๋ ๊ฒ ๊ฐ์ ๋ฐ๊ฟ ์๋ ์๋ ํํ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋?
- ์ฌ์ค ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค ๋ณด๋ฉด ์ฌ๋ฌ ์ฌ๋ ๊ณผ ํจ๊ป ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์์ ์ด ํ๋์ ํจ์๋ง ๋ง๋ค๊ณ , ๋ค๋ฅธ ์ฌ๋์ด ๊ทธ ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํ๋ค. ์ด๋ ๋ฐํํด์ฃผ๋ ํ์ ์ ํํ๋ก ์ ์ธํ๋ฉด ๋ฐ์์ ์ฌ์ฉํ๋ ์ฌ๋์ด ๋ง์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ์ง ๋ชปํ๊ฒ ๋๋ค.
- ๊ทธ๋ ๋ค๋ฉด ๋ฐ๋๋ฉด ์๋๋ ๋ฐ์ดํฐ์๋ ์ด๋ค ๊ฒ์ด ์์๊น? ํ๋ฒ์ด๋ ์ด๋ฆ, ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ ๋๋ ์ ๋ณด ๋ฑ์ด๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ฌํ ์ดํด ์์ด ๋ง์๋๋ก ๊ฐ์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋ ํํ์ ์ด๋ฅผ ๋ฐฉ์งํด์ฃผ๋ ์ญํ ์ ํ๋ค.
์ธํธ
- ์ธํธ(set) ๋ ๊ฐ์ ์์ ์์ด ์ ์ฅํ๋ ์ค๋ณต์ ๋ถํ ํ๋ ์๋ฃํ์ผ๋ก ์ํ์ ์งํฉ๊ณผ ๊ฐ๋ ์ ์ผ๋ก ์์ฃผ ๋น์ทํ๋ค.
- ์ค๋ณต์ ๋ถํ ํ๋ ํน์ง ๋๋ฌธ์ ํ๋ก๊ทธ๋๋ฐ์์ ๋งค์ฐ ์ ์ฉํ๋ค.
- ๋ํ์ ์ผ๋ก ๋ฌธ์ ํ๋์ ๋ค์ด๊ฐ ์๋ ๋จ์ด ์ข ๋ฅ์ ๊ฐ์๋ฅผ ์ ๋ ๋ชจ๋ ๋จ์ด๋ฅผ ์ถ์ถํ ํ ์ธํธ๋ก ๋ณํ ํ๋ฉด ๋จ์ด ์ข ๋ฅ์ ๊ฐ์๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค. ํ์ด์ฌ์์๋ ์ธํธ ์ ์ธ์ ํ๋ ๊ฒ์ผ๋ก ์ฌ์ฉ ํ ์ ์๋ค.
>>> 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(1) # 1์ ์ถ๊ฐํ๋ ๋ช
๋ น์ด์ง๋ง ์ค๋ณต ๋ถํ๋ก ์ถ๊ฐ๋์ง ์์
>>> s
{1, 2, 3}
>>> s.remove(1) # 1 ์ญ์
>>> s
(2, 3}
>>> s.update([1, 4, 5, 6, 7]) # [1, 4, 5, 6, 7] ์ถ๊ฐ
>>> s
{1, 2, 3, 4, 5, 6, 7}
>>> s.discard(3) # 3 ์ญ์
>>> s
{1, 2, 4, 5, 6, 7}
>>> 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([1,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([1, 2])
{1, 2}
ํฉ์งํฉ
- ๋ ์งํฉ์ ์ค๋ณต๊ฐ์ ์ ๊ฑฐํ๊ณ ํฉ์น๋ ์ฐ์ฐ
- s1.union(s2)๋ฅผ ํตํด s1,๊ณผ s2์ ํฉ์งํฉ์ด ์ถ๋ ฅ๋๋ค.
- ํฉ์งํฉ์ union() ๊ณผ ๊ฐ์ ํจ์๋ก๋ ํํํ ์ ์์ง๋ง, | ๊ธฐํธ๋ก๋ ์ถ์ถํ ์ ์๋ค.
- s1 | s2 ์ ๊ฒฐ๊ณผ๊ฐ s1.union(s2) ์ ๋์ผํ๋ค.
๊ต์งํฉ
- ๋ ์งํฉ ์์ชฝ์ ๋ชจ๋ ํฌํจ๋ ๊ฐ๋ง ์ถ์ถํ๋ ์ฐ์ฐ
- s1,s2 ๋ ๋ชจ๋ 3,4,5 ๋ฅผ ์์๋ก ๊ฐ์ง๊ณ ์์ด s1.intersection(s2) ๋ s1 & s2 ๋ก ๊ต์งํฉ์ ์ถ์ถํ ์ ์๋ค.
- ๊ต์งํฉ์ ๊ฐ๋ ์ if๋ฌธ์์ ๋ฐฐ์ ๋ and ์กฐ๊ฑด์ ๊ฐ๋ ๊ณผ ๋น์ทํ๋ค.
์ฐจ์งํฉ
- ์์ ์๋ s1์ ์์ ์ค s2์ ํฌํจ๋ ์์๋ฅผ ์ ๊ฑฐํ๋ ์ฐ์ฐ
- s1์์ s1๊ณผ s2์ ๊ต์งํฉ ์์๋ฅผ ์ญ์ ํ์ฌ s1์ [1, 2, 3, 4, 5]๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก [3, 4, 5] ๋ฅผ ์ ๊ฑฐํ๋ฉด [1, 2]๋ง ๋จ๋๋ค.
- s1.difference(s2) ๋๋ s1 - s2 ๋ก ์ฐจ์งํฉ์ ์ถ์ถํ ์ ์๋ค.
์ฐ์ฐ ํจ์ ๊ธฐํธ ์์
ํฉ์งํฉ | union | | | s1.union(s2), s1 | s2 |
๊ต์งํฉ | intersection | & | s1.intersection(s2), s1 & s2 |
์ฐจ์งํฉ | difference | - | s1.difference(s2), s1-s2 |
๋์ ๋๋ฆฌ
- ์์ด์ฌ์ ์์ ๊ฒ์์ ์ํด ์์ด ๋จ์ด๋ค์ ์ ์ฅํด ๋์ ๋ฐฉ์๊ณผ ๋น์ท
- ์์ด์ฌ์ ์์๋ ๊ฐ ๋จ์ด๋ฅผ ๊ฒ์ํ ์ ์๋๋ก ์์ธ(index)์ ๋ง๋ค์ด ๋๊ณ ์์ธ์ ํตํด ๊ทธ ๋จ์ด๋ฅผ ์ฐพ์ ์๋ฏธ๋ฅผ ํ์ ํ๋ค.
- ์์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ฝ๋๋ก ๊ตฌ๋ถํด ๋์ ์ ์ผํ ์ ๋ณด์ด๋ฉฐ ๋จ์ด๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ์
ํค (key), ๊ฐ(value)
- ๋์ ๋๋ฆฌ ๊ตฌ์กฐ์์๋ ๋ฐ์ดํฐ์ ์ ์ผํ ๊ตฌ๋ถ์์ธ ํค๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฒ์ํ ์ ์๊ฒํ๊ณ , ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ด๋ผ๋ ์ด๋ฆ๊ณผ ์์ผ๋ก ์ ์ฅํ์ฌ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋๋ก ํ๋ค.
- ํ๋ฒ ์ด๋ฆ ์๋
์์ผ ์ฃผ์
20150230 ํ๊ธธ๋ 1995-04-03 ์์ธ์ ๋๋๋ฌธ๊ตฌ 20150233 ๊น์์ฒ 1995-04-20 ์ฑ๋จ์ ๋ถ๋น๊ตฌ 20150234 ์ค์์ฌ 1996-01-03 ์ฑ๋จ์ ์ค์๊ตฌ 20150236 ์ต์ฑ์ฒ 1995-12-27 ์ธ์ฒ์ ๊ณ์๊ตฌ - ๋ํ์ ์ธ์ ์ฌํญ์์ ํ๋ฒ์ด ๋๋จธ์ง ์ ๋ณด๋ฅผ ๊ตฌ๋ถํ๋ ํค๋ก, ํ๋ฒ์ ํค๋ก ํ์ฌ ์ด๋ฆ, ์๋ ์์ผ, ์ฃผ์๋ฅผ ๋ฆฌ์คํธ ํํ๋ก ์ ์ฅํ ๋ค์ ํ ๋ฒ์ ๊ฒ์ํ ์ ์๋ ํํ๊ฐ ๋๋ฉด ํ๋ฒ์ ์ด์ฉํด ๋ค๋ฅธ ์ ๋ณด์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค.
- ํค์ ๊ฐ์ ์์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ์์ ์ค์ํ์์ ๊ฐ์ธ์ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ ํ๊ต์ ํ๋ฒ, ์ ํ ๋ฒํธ ๋ฑ์ ๋ชจ๋ ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ๋ ํค๋ก ์๊ฐํ ์ ์๋ค.
ํ์ด์ฌ์์์ ๋์ ๋๋ฆฌ
๐ก ๋์ ๋๋ฆฌ ๋ณ์ = {ํค1 : ๊ฐ1, ํค2 : ๊ฐ2, ํค3 : ๊ฐ3, ,,,}
ํ๋ฒ (ํค) ์ด๋ฆ (๊ฐ)
20140012 | Sungchul |
20140059 | Jiyong |
20150234 | Jaehong |
20140058 | Wonchul |
ํ๋ฒ → ํค, ์ด๋ฆ → ๊ฐ
- ๋ค์ํ ์๋ฃํ์ด ๋ค์ด๊ฐ ์ ์์ด ์ด๋ฆ์ ๋ฌธ์์ด์ด๋ฏ๋ก ์ผ๋ฐ์ ์ธ ๋ฌธ์์ด๋ก ์ ์ฅํ๋ค.
- ๊ทธ๋ฌ๋ ๋ฆฌ์คํธ์ ๊ฐ์ด ํ ๋ฒ์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ค๊ฑฐ๋, ํํ ๋๋ ์ธํธ์ ๊ฐ์ ๋ฐ์ดํฐ๋ ์ฌ์ฉํ ์ ์๋ค. ๋์ ๋๋ฆฌ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
>>> student_info = {20140012 : 'Sungchul', 20140059 : 'Jiyong', 20150234 : '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'}
- ํค๋ฅผ ์ด์ฉํ์ฌ ํด๋น ๋ณ์๋ฅผ ํธ์ถํ ํ ์๋ก์ด ๊ฐ์ ํ ๋น
- ๋ฐ์ดํฐ ์ถ๊ฐ๋ ์๋ก์ด ํค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ ๋นํ๊ณ ํ ๋น ์ ์ฌ์ฉ๋๋ ํค๊ฐ ๊ธฐ์กด์ ์๋ ํค๋ผ๋ฉด ํด๋น ๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ , ๊ธฐ์กด์ ์๋ ํค๋ผ๋ฉด ์๋ก์ด ๊ฐ์ผ๋ก ์ถ๊ฐ๋๋ค.
๋์ ๋๋ฆฌ ํจ์
๊ตญ๊ฐ๋ช ๊ณผ ๊ตญ๊ฐ ์ ํ๋ฒํธ๋ฅผ ๋ฌถ์ด ๋ณด์ฌ์ฃผ๋ ์ฝ๋
>>> 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'])
- ํค๊ฐ ๋ฆฌ์คํธ ํํ๋ก ์ถ๋ ฅ๋จ
- ํค๋ง ์ถ๋ ฅํ๋ keys() ํจ์
>>> country_code.keys () # ๋์ ๋๋ฆฌ์ ํค๋ง ์ถ๋ ฅ dict_keys(['America', 'Korea', 'China', 'Japan'])
- ํค๊ฐ ๋ฆฌ์คํธ ํํ๋ก ์ถ๋ ฅ๋จ
>>> 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([1, 82, 86, 81, 49])
ํค-๊ฐ ์์ ๋ชจ๋ ๋ณด์ฌ์ฃผ๋ items() ํจ์
>>> country_code.items () # ๋์
๋๋ฆฌ ๋ฐ์ดํฐ ์ถ๋ ฅ
dict_items([('America', 1), ('Korea', 82), ('China', 86), ('Japan', 81), ('German', 49)])
๋์ ๋๋ฆฌ์ 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: German
Vlaue: 49
if๋ฌธ์ ์ฌ์ฉํ์ฌ ํน์ ํค๋ ๊ฐ์ด ํด๋น ๋ณ์์ ํฌํจ๋์ด ์๋์ง ํ์ธ
>>> "Korea" in country_code.keys () # ํค์ "Korea"๊ฐ ์๋์ง ํ์ธ
True
>>> 82 in country_code.values () # ๊ฐ์ 82๊ฐ ์๋์ง ํ์ธ
True
collections ๋ชจ๋
- ํ์ด์ฌ์ ๋ด์ฅ ์๋ฃ๊ตฌ์กฐ (built-in data structure) ๋ชจ๋์ธ collections
- collections ๋ชจ๋์ ์ด๋ฏธ ์์์ ๋ฐฐ์ด ๋ค์ํ ์๋ฃ๊ตฌ์กฐ์ธ ๋ฆฌ์คํธ, ํํ, ๋์ ๋๋ฆฌ ๋ฑ์ ํ์ฅ ํ์ฌ ์ ์๋ ํ์ด์ฌ์ ๋ด์ฅ ๋ชจ๋์ด๋ค. ๊ธฐ์กด์ ๋ฐฐ์ ๋ ์๋ฃ๊ตฌ์กฐ๋ณด๋ค ํจ์จ์ ์ด๊ณ ํธ๋ฆฌํ๋ค.
- collections ๋ชจ๋์ deque, OrderedDict, defaultdict, Counter, namedruple ๋ฑ์ ์ ๊ณตํ๋ค. ๊ฐ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
from collections import deque
from collections import OrderedDict
from collections import defaultdict
from collections import Counter
from collections import namedtuple
deque ๋ชจ๋
- deque ๋ชจ๋์ ์คํ๊ณผ ํ๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๋ชจ๋์ด๋ค. deque๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฆฌ์คํธ์ ๋น์ทํ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ๋ค.
- append() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ๋ฆฌ์คํธ์ฒ๋ผ ๋ฐ์ดํฐ๊ฐ ์ธ๋ฑ์ค(index) ๋ฒํธ๋ฅผ ๋๋ฆฌ๋ฉด์ ์์ด๊ธฐ ์์ํ๋ค.
>>> 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])
- deque_list.pop()์ ์ํ์ํค๋ฉด ์ค๋ฅธ์ชฝ ์์๋ถํฐ ํ๋์ฉ ์ถ์ถ๋๋ค. ์ฆ, ์คํ์ฒ๋ผ ๋์ค์ ๋ฃ์ ๊ฐ๋ถํฐ ํ๋์ฉ ์ถ์ถ๋๋ ๊ฒ์ด๋ค.
>>> deque_list.pop()
4
>>> deque_list.pop()
3
>>> deque_list.pop()
2
>>> deque_list
deque([0, 1])
deque์์์ ํ ์ฌ์ฉ ๋ฐฉ๋ฒ
- pop(0)์ ์ ๋ ฅํ๋ฉด ์คํ๋ ๊ฒ ๊ฐ์ง๋ง, deque์์๋ ์๋ํ์ง ์๋๋ค.
- ๋์ deque๋ appendleft( ) ํจ์๋ก ์๋ก์ด ๊ฐ์ ์ผ์ชฝ๋ถํฐ ์ ๋ ฅํ๋๋ก ํ์ฌ ๋จผ์ ๋ค์ด๊ฐ ๊ฐ๋ถํฐ ์ถ๋ ฅ๋ ์ ์๋๋ก ํ๋ค.
>>> from collections import deque
>>>
>>> deque_list = deque ()
>>> for i in range (5):
deque_list.appendleft(i)
>>> print(deque_list)
deque([4, 3, 2, 1, 0])
deque ๋ชจ๋์ ์ฅ์
- deque ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํน์ฑ์ ์ง์
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์์์ ๊ฐ์ ํ ์ชฝ์ผ๋ก ์ฐ๊ฒฐํ ํ, ์์์ ๋ค์ ๊ฐ์ ์ฃผ์๊ฐ์ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฒ์ด๋ค.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์์ ์ฌ์ง์ฒ๋ผ ๋ค์ ์์์ ์ฃผ์๊ฐ์ ์ ์ฅํ๋ฏ๋ก ๋ฐ์ดํฐ๋ฅผ ์ํ์ผ๋ก ์ ์ฅํ ์ ์๋ค. ๋ํ, ๋ง์ง๋ง ์์์ ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ฃผ์๋ฅผ ์ ์ฅ ์์ผ ํด๋น ๊ฐ์ ์ฐพ์๊ฐ ์ ์๋๋ก ์ฐ๊ฒฐ์ํจ๋ค.
- ์ด๋ฌํ ํน์ง ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ธฐ๋ฅ ์ค ํ๋๊ฐ rotate() ํจ์์ด๋ค. rotate()๋ ๊ธฐ์กด deque์ ์ ์ฅ๋ ์์๋ค ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๊พธ๋ ๊ธฐ๋ฒ์ด๋ค.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์์ชฝ ๋์ ์์๋ค์ ์ฐ๊ฒฐํ ์ ์์ผ๋ฏ๋ก ์์ ์ฌ์ง์ฒ๋ผ ์ํ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค. ์ด๋ฌํ ํน์ง์ ์ด์ฉํ์ฌ ๊ฐ ์์์ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ํ๋์ฉ ์ฎ๊ธด๋ค๋ฉด ์ค์ ๋ก ์์๋ฅผ ์ฎ๊ธฐ์ง ์๋๋ผ๋ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
>>> from collections import deque
>>>
>>> deque_list = deque()
>>> for i in range(5):
deque_list.appendleft(i)
- ๊ธฐ์กด ๋ฐ์ดํฐ์ rotate(2) ํจ์๋ฅผ ์ํ์ํค๋ฉด 3๊ณผ 4์ ๊ฐ์ด ๋ ์นธ์ฉ ์ด๋ํ์ฌ 0๋ฒ์งธ, 1๋ฒ์งธ ์ธ๋ฑ์ค๋ก ์ฎ๊ฒจ์ง ๊ฒ์ ์ ์ ์๋ค. ๋ค์ rotated(2)๋ฅผ ์ํ์ํค๋ฉด 1๊ณผ 2๊ฐ 0๋ฒ์งธ, 1๋ฒ์งธ ์ธ๋ฑ์ค๋ก ์ด๋ํ๋ค.
>>>
>>> print(deque_list)
deque([0, 1, 2, 3, 4])
>>> deque_list.rotate(2)
>>> print(deque_list)
deque([3, 4, 0, 1, 2])
>>> deque_list.rotate(2)
>>> print(deque_list)
deque([1, 2, 3, 4, 0])
reserved () ํจ์๋ก ๋ฐ๋๋ก ๋ฐ์ดํฐ ์ ์ฅ
>>> print(deque(reversed(deque_list)))
deque([0, 4, 3, 2, 1])
extend() ํจ์, extendleft() ํจ์
>>> deque_list.extend([5, 6, 7])
>>> print(deque_list)
deque([1, 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์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๋ ์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ญ์ ํ ์ ์๋ค. ๋์ฉ๋์ ํ๋ ์คํ์ ์ฒ๋ฆฌํ ์ผ์ด ์๋ค๋ฉด deque ์ฌ์ฉ์ ๊ถ์ฅํ๋ค.
OrderedDict ๋ชจ๋
- OrderedDict ๋ชจ๋์ ์ด๋ฆ ๊ทธ๋๋ก ์์๋ฅผ ๊ฐ์ง ๋์ ๋๋ฆฌ ๊ฐ์ฒด์ด๋ค.
- ๋์ ๋๋ฆฌ๋ ์์๋ฅผ ๋ณด์ฅํ์ง ์๋ ๊ฐ์ฒด์ฌ์ ๋์ ๋๋ฆฌ ํ์ผ์ ์ ์ฅํ๋ฉด ํค๋ ์ ์ฅ ์์์ ์๊ด์์ด ์ ์ฅ๋๋ค.
d = {}
d['x'] = 100
d['T'] = 500
d['y'] = 200
d['z'] = 300
for k, v in d.items():
print(k, v)
#์ถ๋ ฅ ๊ฒฐ
x 100
l 500
y 200
z 300
- x, l, y, z ์ ์์๋๋ก ํค๋ฅผ ์ ์ฅํ์ง๋ง, ๊ฒฐ๊ณผ๋ ์ ์ฅํ ์์์ ์๊ด์์ด ๋ค์ํ ํํ๋ก ์ถ๋ ฅ๋๋ค.
- ํ์ง๋ง OrderedDict ๋ชจ๋์ ํค์ ์์๋ฅผ ๋ณด์ฅํ๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ์ ์ฅํ ์์๋๋ก ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅ ํ๋ค.
from collections import OrderedDict # OrderedDict ๋ชจ๋ ์ ์ธ
d = OrderedDictO
d['x'] = 100
d['y'] = 200
d['z'] =300
d['l'] =500
for k, v in d.items():
print(k, v)
#์ถ๋ ฅ ๊ฒฐ๊ณผ
x 100
y 200
z 300
l 500
- ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ด๋ค ์ปดํจํฐ๋ ์๊ด์์ด x, y, z, 1์ ์์๋๋ก ํค-๊ฐ์์ด ์ถ๋ ฅ๋๋ค.
- OrderedDict ๋ชจ๋์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋์ ๋๋ฆฌ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ํค๋ ๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ ๋์ด๋ค.
ex) ํค๋ฅผ ์ด์ฉํ์ฌ ์ฃผ๋ฏผ๋ฑ๋ก ๋ฒํธ๋ฅผ ๋ฒํธ ์์๋๋ก ์ ๋ ฌํ ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ
def sort_by_key(t):
return t[0]
from collections import OrderedDict # OrderedDict ๋ชจ๋ ์ ์ธ
d = dict()
d['x'] = 100
d['y'] = 200
d['z'] = 300
d['l'] = 500
for k, v in OrderedDict(sorted(d.items(), key=sort_by_key)).items():
print(k, v)
#์ถ๋ ฅ ๊ฒฐ๊ณผ
l 500
x 100
y 200
z 300
- ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋์ ๋๋ฆฌ์ ๊ฐ์ธ ๋ณ์ d๋ฅผ ๋ฆฌ์คํธ ํํ๋ก ๋ง๋ ๋ค์, sorted() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌํ๋ค.
- sorted(d.items(), key=sort_by_key)์ ์ฝ๋๋ง ๋ฐ๋ก ์คํํ๋ฉด ๋ค์์ฒ๋ผ ์ ๋ ฌ๋์ด ์ด์ฐจ์ ํํ๋ก ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
๐ก [(’l’, 500), ('x', 100), (’y’, 200),(’z’, 300)]
- ์ฆ, ๊ธฐ์กด์ ๋์ ๋๋ฆฌ ๋ณ์๋ฅผ ๋ฆฌ์คํธ๋ก ์ถ์ถํ๊ณ , sorted() ํจ์๋ก ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ ํ. ๋ค์ OrderedDict ๋ชจ๋๋ก ๊ฐ์ธ์ฃผ๋(wrapping) ๋ฐฉ์์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ธฐ์กด์ ๋์ ๋๋ฆฌ๋ ๋ฆฌ์ค ํธ์ ์์๋ฅผ ์งํค๋ฉด์ ๋์ ๋๋ฆฌ ํํ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
- ๋ง์ฝ, ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ค๋ฉด ์์ ์ฝ๋์ 1ํ๊ณผ 2ํ์ ๋ค์์ฒ๋ผ ๋ฐ๊พธ๋ฉด ๋๋ค. ์ฐธ๊ณ ๋ก t[0]๊ณผ t[1]์ ์ ๋ฆฌ์คํธ ์์ ํํ ๊ฐ ์ค 0๋ฒ์งธ ์ธ๋ฑ์ค(l, x, y, z)์ 1๋ฒ์งธ ์ธ๋ฑ์ค(500, 100, 200, 300)๋ฅผ ๋ปํ๋ค.
def sort_by_value(t):
return t[1]
defaultdict ๋ชจ๋
- defaultdict ๋ชจ๋์ ๋์ ๋๋ฆฌ์ ๋ณ์๋ฅผ ์์ฑํ ๋ ํค์ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์๋ก์ด ํค๋ฅผ ์์ฑํ ๋ ๋ณ๋ค๋ฅธ ์กฐ์น ์์ด ์๋ก์ด ๊ฐ์ ์์ฑํ ์ ์๋ค.
d = dict()
print(d["first"])
Traceback (most recent call last):
File "defauUdictl.py", line 2, in <module>
print(d["first"])
KeyError: 'first'
- ์ค์ ๋์ ๋๋ฆฌ์์๋ ์์ ์ฌ์ง์ฒ๋ผ ํค๋ฅผ ์์ฑํ์ง ์๊ณ ํด๋น ํค์ ๊ฐ์ ํธ์ถํ๋ ค๊ณ ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ฆ, ์ฝ๋์์ first์ ํค ๊ฐ์ ๋ณ๋๋ก ์์ฑํ์ง ์์ ์ฑ ๋ฐ๋ก ํธ์ถํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
defaultdict ๋ชจ๋ ์ฌ์ฉ
from collections import defaultdict
d = defaultdict(lambda: 0) # Default ๊ฐ์ 0 ์ผ๋ก ์ค์
print(d["first"])
#์ถ๋ ฅ ๊ฒฐ๊ณผ
0
- ์์ ์ฝ๋์์์ ํต์ฌ์ 3ํ์ d=defaultdict(lambda: 0)์ด๋ค.
- defaultdict ๋ชจ๋์ ์ ์ธํ๋ฉด์ ๋์์ ์ด๊น๊ฐ์ 0์ผ๋ก ์ค์ ํ ๊ฒ์ด๋ค.lambda() ํจ์๋ฅผ ‘return 0’์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค. ์ด๋ค ํค๊ฐ ๋ค์ด์ค๋๋ผ๋ ์ฒ์ ๊ฐ์ ์ ๋ถ 0์ผ๋ก ์ค์ ํ๋ค๋ ๋ป์ด๋ค.
from collections import defaultdict
s = [('yellow', 1), ('blue’, 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
print(d.itemsO)
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
#์ถ๋ ฅ ๊ฒฐ๊ณผ
dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
- ์ด์ธ์๋ defaultdict์ ์ด๊น๊ฐ์ ์ฒ๋ผ ๋ฆฌ์คํธ ํํ๋ก๋ ์ค์ ํ ์ ์๋ค.
- s ๋ณ์์ ํํ ๋ฐ์ดํฐ๋ค์ ์ด์ฐจ์ ๋ฆฌ์คํธ ํํ๋ก ์ ์ฅํ์๋ค.
- ๋ํ 4ํ์ d = defaultdict(list) ์ฝ๋๋ ๋ณ์ d๋ฅผ defaultdict ํ์ ์ผ๋ก ์ ์ธํ๋ฉด์ ์ด๊น๊ฐ์ ๋ฆฌ์คํธ๋ก ์ ์ธํ์๋ค. 5ํ๋ถํฐ๋ for๋ฌธ์ด ์๋ํ๋ฉด์ ๋ณ์ s์ ๊ฐ ์์์์ ํค ๊ฐ๊ณผ ์ค์ ๊ฐ์ ์ถ์ถํ์ฌ ๋ณ์ ์์ ์ถ๊ฐํ์๋ค.
- ์ค์ํ ๊ฒ์ ๋ณ์ d๋ deafultdict ํ์ ์ด๋ฉด์ list๊ฐ ์ด๊น๊ฐ์ผ๋ก ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ์๋ก์ด ํค ๊ฐ์ด ์๋๋ผ๋ ๋ณ๋๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ธ ‘diet’์ ๋นํด ์ฝ๋ ์๋ฅผ ์ค์ผ ์ ์์ด defaultdict ํ์ ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ผ๊ณ ํ ์ ์๋ค.
Counter ๋ชจ๋
- Counter ๋ชจ๋์ ์ํ์ค ์๋ฃํ์ ๋ฐ์ดํฐ ๊ฐ์ ๊ฐ์๋ฅผ ๋์ ๋๋ฆฌ ํํ๋ก ๋ฐํํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฆ, ๋ฆฌ์คํธ๋ ๋ฌธ์์ด๊ณผ ๊ฐ์ ์ํ์ค ์๋ฃํ์ ์ ์ฅ๋ ์์ ์ค์์ ๊ฐ์ ๊ฐ์ด ๋ช ๊ฐ ์๋์ง ๊ทธ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
>>> from collections import Counter
>>>
>>> text = list("gallahad")
>>> text
['g' 'a', 'l', 'l', 'a', 'h', 'a', 'd']
>>> c = Counter(text)
>>> c
Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
>>> c["a"]
3
- ์ ์ฝ๋์์๋ ๊ธฐ์กด ๋ฌธ์์ด๊ฐ์ธ ‘gallahad’๋ฅผ ๋ฆฌ์คํธํ์ผ๋ก ๋ณํํ ํ, text ๋ณ์์ ์ ์ฅํ์๋ค. ์ฌ์ค ‘gallahad’ ์์ฒด๋ ์ํ์ค ์๋ฃํ์ธ ๋ฌธ์์ด์ด๋ฏ๋ก ๊ตณ์ด ๋ฆฌ์คํธ๋ก ๋ณํํ ํ์๋ ์์ง๋ง ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๋ฆฌ์คํธ ํํ๋ก ์ ์ฅํ์๋ค.
- c ๋ผ๋ Counter ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด์ text ๋ณ์๋ฅผ ์ด๊น๊ฐ์ผ๋ก ์ค์ ํ์๋ค. ์ด๋ฅผ ์ถ๋ ฅํ๋ฉด ์ ๊ฒฐ๊ณผ์ฒ๋ผ ๊ฐ ์ํ๋ฒณ์ด ๋ช ๊ฐ์ฉ ์๋์ง ์ฝ๊ฒ ํ์ธํ ์ ์๋ค.
- c["a"]์ฒ๋ผ ๋์ ๋๋ฆฌ ํํ์ ๋ฌธ๋ฒ์ ๊ทธ๋๋ก ์ด์ฉํด ํน์ ํ ์คํธ์ ๊ฐ์๋ ๋ฐ๋ก ์ถ๋ ฅ ํ ์ ์๋ค.
- Counter๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ ๋ฌธ์์ ๊ฐ์ ์ธ๋ ์์ ์ ๋งค์ฐ ์ฝ๊ฒ ํ ์ ์๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ ๋ ฌ๊น์ง ๋๋ธ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ธํ ์ ์๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด์ Lab์์ ์ํํ ์์ ์ ๋จ ํ ์ค์ ์ฝ๋๋ก ์์ฑํ์๋ค.
>>> text = 'A press release is the quickest and easiest way to get free
publicity. If well written, a press release can result in multiple published
articles about your firm and its products. And that can mean new prospects
contacting you asking you to sell to them. •••.'.lower().split()
>>> Counter(text)
Counter({'and': 3, 'to': 3, 'can': 2, 'press': 2, 'release': 2, 'you': 2, 'a': 2, 'sell': 1,
'about': 1, 'free': 1, 'firm': 1, 'quickest': 1, 'products.': 1, 'written,': 1, 'them.': 1,
'•••.': 1, 'articles': 1, 'published': 1, 'mean': 1, 'that': 1, 'prospects': 1, 'its': 1,
'multiple': 1, 'if': 1, 'easiest': 1, 'publicity.': 1, 'way': 1, 'new': 1, 'result': 1,
'the': 1, 'your': 1, 'well': 1, 'is': 1, 'asking': 1, 'in': 1, 'contacting': 1, 'get': 1})
- Counter๋ ๋จ์ํ ์ํ์ค ์๋ฃํ์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ ์ญํ ๋ ํ์ง๋ง. ๋์ ๋๋ฆฌ ํํ๋ ํค์๋ ํํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ Counter๋ฅผ ์์ฑํ ์ ์๋ค.
- ๋จผ์ ๋์ ๋๋ฆฌ ํํ๋ก Counter ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, {'red': 4, 'blue': 2}๋ผ๋ ์ด๊น๊ฐ์ ์ฌ์ฉํ์ฌ Counter๋ฅผ ์์ฑํ์๋ค. ๋ํ elements() ํจ์๋ฅผ ์ฌ์ฉ ํ์ฌ ๊ฐ ์์์ ๊ฐ์๋งํผ ๋ฆฌ์คํธํ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ์๋ค.
>>> 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’]
ํค์๋ ํํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ 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']
- ๋งค๊ฐ ๋ณ์์ ์ด๋ฆ์ ํค (key) ๋ก , ์ค์ ๊ฐ์ ๊ฐ (vlaue)์ผ๋ก ํ์ฌ Counter ๋ฅผ ์์ฑํ ์ ์๋ค.
๊ธฐ๋ณธ ์ฌ์น์ฐ์ฐ ์ง์
>>> 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
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
- ํ์ด์ฌ์์ ์ง์ํ๋ ๊ธฐ๋ณธ ์ฐ์ฐ์ธ ๋ง์ , ๋บ์ , ๋ ผ๋ฆฌ ์ฐ์ฐ ๋ฑ์ด ๊ฐ๋ฅํ๋ค.
- ์ ์ฝ๋๋ 2๊ฐ์ Counter c์ d๋ฅผ ์์ฑํ ํ c.subtract(d)๋ฅผ ์ํํ์ฌ ไป์ ๋ํ 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})
- ๅ ๊ธฐํธ๋ ๋ Counter ๊ฐ์ฒด์ ์๋ ๊ฐ ์์๋ฅผ ๋ํ ๊ฒ์ด๊ณ , & ๊ธฐํธ๋ ๋ ๊ฐ์ฒด์ ๊ฐ์ ๊ฐ์ด ์์๋, ์ฆ ๊ต์งํฉ์ ๊ฒฝ์ฐ์๋ง ์ถ๋ ฅํ์๋ค.
- ๋ฐ๋๋ก | ๊ธฐํธ๋๋ Counter ๊ฐ์ฒด์์ ํ๋๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด, ๊ทธ๋ฆฌ๊ณ ์ข ๋ ํฐ ๊ฐ์ด ์๋ค๋ฉด ๊ทธ ๊ฐ์ผ๋ก ํฉ์งํฉ์ ์ ์ฉํ์๋ค.
namedtuple ๋ชจ๋
- namedtuple ๋ชจ๋์ ํํ์ ํํ๋ก ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ด๋ค ํน์ ๋ฐ์ดํฐ๋ ์ ๋ง๋ค ๊ท์ ๋ ์ ๋ณด๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด, ํ์์ด๋ผ๋ ์ ๋ณด๋ฅผ ์ปดํจํฐ์ ์ ์ฅํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๋ณ์(ํ๋ฒ, ์ด๋ฆ, ํ๋ , ํ๊ณผ ๋ฑ)๊ฐ ์๋ค. ์ด๋ฌํ ์ ๋ณด๋ฅผ ํ๋์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ์ด์ฐจ์ ๋ฆฌ์คํธ ํํ๋ก ๊ตฌ์ฑํด๋ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋, ๋์ค์๋ผ๋ ์ด ๋ฆฌ์คํธ๋ฅผ ๋ค๋ฅธ ์ฌ๋์ด ์ฌ์ฉํ๋ค๋ฉด ์์ธํ ์ ๋ณด๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ด ์ด๋ ค์ธ ์ ์๋ค. ๊ทธ๋์ ์ด๋ฌํ ์ ๋ณด๋ฅผ ํ๋์ ํํ ํํ๋ก ๊ตฌ์ฑํด ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๊ฐ namedtuple์ด๋ค.
- C ์ธ์ด์์๋ struct๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ค.
>>> from collections import namedtuple
>>>
>>> Point = namedtuple('Point1', ['x', 'y'])
>>> p = Point(ll, y=22)
>>> p
Point(x=ll, y=22)
>>> p.x, p.y
(11, 22)
>>> print(p[0] + p[l])
33
- ์ ์ฝ๋๋ ์ขํ ํ๋ฉด์์์ ์ ์ ์์น๋ฅผ ํํํ๊ธฐ ์ํด Point๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๊ฐ์ ์ ์ฅํ namedtuple ์ด๋ค. Point = namedtuple(’Point', ['x', 'y']) ์ฝ๋์์ Point ๊ฐ์ฒด์ ์ด ๋ฆ์ Point๋ก ์ง์ ํ๊ณ , ์ ์ฅ๋๋ ์์์ ์ด๋ฆ์ x์ y๋ก ์ง์ ํ์๋ค.
- ๋ค์์ผ๋ก Point ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ์์ฑ์ ํจ์์ ๋น์ทํ๋ค. Point ๊ฐ์ฒด์์ x์ y๋ฅผ ๋ณ์๋ก ์ฌ์ฉํ๊ณ ์๊ณ ๊ฐ๊ฐ p = Pointd(11, y=22)์์ ์ฐจ๋ก๋ก ์ฌ์ฉ๋์ด ๊ฐ์ ์ ์ฅํ ์ ์๋ค. ์ ๋ ฅ๋ ๊ฐ์ p ๋ณ์์ ์ ์ฅํ๋ค.
- ์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ๊ฒ์ p ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฒซ์งธ, ์์์ ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. p.x, p.y์ ๊ฐ์ด ๋ณ์๋ช ๊ณผ ์์์ ์ด๋ฆ์ ์ (.) ์ผ๋ก ์ฐ๊ฒฐํ๋ฉด ํด๋น ๊ฐ์ ๋ถ๋ฌ๋ผ ์ ์๋ค.
- ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ธ๋ฑ์ค๋ ์ด๋ฆ์ด ๋ค์ด๊ฐ ์์๋๋ก ๊ฐ์ด ์ ์ฅ๋์ด ์๋ค. ์ฆ, p[0]์ Point ๊ฐ์ฒด์์ ๋จผ์ ์ ์ฅ๋์ด์ผ ํ๋ x๊ฐ์ ๋์๋๋ค. p[1]์ Point ๊ฐ์ฒด์์ ๋ ๋ฒ์งธ๋ก ์ ์ฅ๋์ด์ผ ํ๋ y๊ฐ์ ๋์๋๋ค. ์ด๋ก ์ธํด ๋ง์ ์ฐ์ฐ์ด๋ ์ธํจํน (unpacking) ์ฐ์ฐ ๋ฑ์ด ๋ชจ๋ ๊ฐ๋ฅํด์ง๋ค.
์ค์ต
ํ ์คํธ ๋ง์ด๋ ํ๋ก๊ทธ๋จ
- ์์์ ๋ฐฐ์ด ๋์ ๋๋ฆฌ์ collections ๋ชจ๋์ ์ด์ฉํ์ฌ ํ ์คํธ ๋ง์ด๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ณด ์. ํ ์คํธ๋ฅผ ๋ถ์ํ์ฌ ์๋ฏธ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ๊ณผ์ ์ ํ ์คํธ ๋ง์ด๋ (text mining)์ด๋ผ๊ณ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ ์คํธ ๋ง์ด๋์ ํ ๋ ๊ฐ ๋ฌธ์ฅ์์ ๋จ์ด๊ฐ ์ผ๋ง๋ ๋ง์ด ์ถํํ๋์ง ๋ถ์ํ๋ค. ์ด๋, defaultdict ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๋ฌธ์ฅ์ ์๋ ๋จ์ด์ ๊ฐ์๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
- ๋ค์ ๋ฌธ์ฅ์ ์๋ ๋จ์ด์ ๊ฐ์๋ฅผ ํ์ ํด๋ณธ๋ค.
๐ก A press release is the quickest and easiest way to get free publicity. If well written, a press release can result in multiple published articles about your firm and its products. And that can mean new prospects contacting you asking you to sell to them. •••
- ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ท์น
๐ก 1. ๋ฌธ์ฅ์ ๋จ์ด ๊ฐ์๋ฅผ ํ์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค. 2. defaultdict ๋ชจ๋์ ์ฌ์ฉํ๋ค. 3. ๋จ์ด์ ์ถํ ํ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด OrderedDict ๋ชจ๋์ ์ฌ์ฉํ๋ค.
- ์คํ ๊ฒฐ๊ณผ
and 3
to 3
a 2
press 2
release 2
...
(์๋ต)
...
contacting 1
asking 1
sell 1
them. 1
•••. 1
์ ๋ต
text = """A press release is the quickest and easiest way to get free
publicity. If well written, a press release can result in multiple
published articles about your firm and its products. And that can mean new
prospects contacting you asking you to sell to them. •••.’"",.lower().split()
from collections import defaultdict
word_count = defaultdict(lambda: 0) # Default ๊ฐ์ 0์ผ๋ก ์ค์
for word in text:
word_count[word] += 1
from collections import OrderedDict
for i, v in OrderedDict(sorted(word_count.items(), key=lambda t: t[1],
reverse=True)).items():
print(i, v)
- 1ํ์ text ๋ณ์์ ์ํ๋ ๋ฌธ์ฅ์ ๋ฃ๊ณ , ์ด๋ฅผ ์๋ฌธ์๋ก ๋ฐ๊พผ ํ ๋จ์ด ๋จ์๋ก ์๋ฅด๋ ์ฝ๋์ด๋ค. ์ด๋ฅผ ์ํด lower ()์ split() ํจ์๋ฅผ ์ฐ์์ผ๋ก ์ฌ์ฉํ์๋ค. ์ด ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ธฐ ์ํด ํ์ด์ฌ ์ ธ์ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ฉด ๋ฆฌ์คํธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
>>> text = 'A press release is the quickest and easiest way to get free
publicity. If weU written, a press release can result in multiple published
articles about your firm and its products. And that can mean new prospects
contacting you asking you to sell to them. lower().split()
>>> print(text)
['a', 'press'j 'release', 'is', 'the', 'quickest', 'and', 'easiest', 'way', 'to',
'get', 'free', 'publicity', 'if', 'well', 'written,', 'a', 'press', 'release',
'can', 'result', 'in', 'multiple', 'published', 'articles', 'about', 'your',
'firm', 'and', 'its', 'products.', 'and', 'that', 'can', 'mean', 'new', 'prospects',
'contacting', 'you', 'asking', 'you', 'to', 'sell', 'to', 'them.', '•••.']
- ๋ค์์ผ๋ก ์ด ๋ฆฌ์คํธ์์ ๊ฐ๊ฐ์ ๋จ์ด๊ฐ ๋ช ๊ฐ ์๋์ง ์นด์ดํธํ๋ ์ฝ๋๊ฐ ํ์ํ๋ค. 3ใ7ํ ์ ๋ณด๋ฉด defaultdict ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๋์ ๋๋ฆฌ์ ํค๊ฐ์ ๋จ์ด๊ฐ ์ถํํ ๋๋ง๋ค word.count [word] += 1์ ํตํด ๊ทธ ์๋ฅผ ์ฆ๊ฐ์ํค๊ณ ์๋ค.
- ๋ค์์ผ๋ก ๋จ์ด์ ์ถํ ํ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ๋ค๋ฉด. 9ใ11ํ๊ณผ ๊ฐ์ด OrderedDict ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ค.
- ์ด ์ฝ๋๋ ์ดํ์ ๋ฐฐ์ธ ํ ์คํธ ๋ถ์์์ ๋ฒกํฐ ์คํ์ด์ค ๋ชจ๋ธ(vector space model)์ ์ง์ ๊ตฌํํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ ์ฝ๋์ด๋ค. ํ์ด์ฌ์ ๋ค์ํ ๋ด์ฅ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ํ ์คํธ๋ฅผ ๋ถ์ ํ๋ ๋ฐฉ๋ฒ์ ์ดํ์ ๋ค์ ๋ฐฐ์ฐ๋๋ก ํ๊ฒ ๋ค.
[์ฐธ๊ณ ]
๋ฌธ์ฅ์ ๋ชจ๋ ์๋ฌธ์๋ก ๋ฐ๊พธ๋ ์ด์ ๋ ๋ณดํต ์์ด ๋ฌธ์ฅ์ ์ฒซ ๊ธ์๊ฐ ๋๋ฌธ์์ผ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ๋๋นํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ํ ์คํธ๋ฅผ ์๋ฌธ์๋ก ๋ณํํ๋ค. ๋ง์ฝ ํ ์คํธ์ ๋, ์๋ฌธ์ ๊ตฌ๋ถ์ด ์ค์ํ๋ค๋ฉด ์ด๋ฅผ ๊ทธ๋๋ก ๋๋๋ ๊ฒ์ด ์ข๋ค.
'๐ ์คํฐ๋ > ํ์ด์ฌ ์คํฐ๋ ๊ฐ์์๋ฃ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[4ํ/์ด์ ์] 7์ฐจ์ ํ์ด์ฌ ์คํฐ๋ - ์๋ฃ๊ตฌ์กฐ (0) | 2023.05.11 |
---|---|
[3ํ/๊น๊ท๋ฆฌ] 7์ฐจ์ ํ์ด์ฌ ์คํฐ๋ - ์๋ฃ๊ตฌ์กฐ (2) | 2023.05.10 |
[4ํ/๊น๋ฏผํ] 7์ฐจ์ ํ์ด์ฌ ์คํฐ๋ - ์๋ฃ๊ตฌ์กฐ (0) | 2023.05.09 |
[1ํ/ํ๊ท๋ฆผ] 6์ฐจ์ ํ์ด์ฌ ์คํฐ๋ - ๋ฌธ์์ด (0) | 2023.05.04 |
[2ํ/๊น๊ฐ๋ฆผ, ์ต๋ค์] 6์ฐจ์ ํ์ด์ฌ ์คํฐ๋ - ๋ฌธ์์ด (0) | 2023.05.04 |