๐Ÿ“š ์Šคํ„ฐ๋””/ํŒŒ์ด์ฌ ์Šคํ„ฐ๋”” ๊ฐ•์˜์ž๋ฃŒ

[4ํŒ€/์ด์ œ์€] 7์ฐจ์‹œ ํŒŒ์ด์ฌ ์Šคํ„ฐ๋”” - ์ž๋ฃŒ๊ตฌ์กฐ

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2023. 5. 11. 02:07

7์ฐจ์‹œ_์ž๋ฃŒ๊ตฌ์กฐ_๊ณผ์ œ.pdf
0.18MB
7์ฐจ์‹œ_์ž๋ฃŒ๊ตฌ์กฐ_๊ฐ•์˜์•ˆ.pdf
1.67MB

๋”๋ณด๊ธฐ

ํŒŒ์ด์ฌ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค!

01 ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ดํ•ด

> ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ฐœ๋…

 

์ž๋ฃŒ๊ตฌ์กฐ(data structure) : ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ๊ทธ ๋ฐ์ดํ„ฐ์˜ ํŠน์ง•์— ๋”ฐ๋ผ ์ปดํ“จํ„ฐ์— ํšจ์œจ์ ์œผ๋กœ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ํ‘œํ˜„ ๋ฐฉ์‹

โ†’ ๋ฐ์ดํ„ฐ์˜ ํŠน์ง•์„ ๊ณ ๋ คํ•˜์—ฌ, ํŠน์ง•์ด ๋‹ค๋ฅธ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค!

๋‹ค์–‘ํ•œ ํ˜•ํƒœ ์ค‘ ์–ด๋Š ๊ฒƒ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€!

 

> ํŒŒ์ด์ฌ์—์„œ์˜ ์ž๋ฃŒ ๊ตฌ์กฐ

ํŒŒ์ด์ฌ์—์„œ์˜ ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.

 

 

02 ์Šคํƒ๊ณผ ํ

> ์Šคํƒ

 

์Šคํƒ(stack) : Last in First Out(LIFO), ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋Š” ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๊ณต๊ฐ„์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ

 

์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ๊ฐํ˜•์˜ ๊ณต๊ฐ„์„ ๋œปํ•จ

๋ฆฌ์ŠคํŠธ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์ €์žฅ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ํ˜•ํƒœ ; ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ

 

- ๊ตฌํ˜„๋ฐฉ์‹

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.pop()
20
>>> a.pop()
10

append๋กœ ์‚ฝ์ž…ํ•œ ์ˆ˜๋ฅผ pop์œผ๋กœ ์ถ”์ถœ

pop( )ํ•จ์ˆ˜๋ฅผ ๊ฐ€์šฉํ•˜๋ฉด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ €์žฅ๋œ ๊ฐ’์„ ์ถ”์ถœํ•˜๊ณ  ๋™์‹œ์— ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ญ์ œ์‹œํ‚ด

 

  • ์Šคํƒ ํ™œ์šฉํ•˜๊ธฐ - ํ…์ŠคํŠธ ์—ญ์ˆœ ์ถœ๋ ฅ
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[::-l])

์ž…๋ ฅ๋ฐ›์€ ํ…์ŠคํŠธ๋Š” word์— ์ €์žฅ๋˜๊ฑฐ, listํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„ ์ฐจ๋ก€๋Œ€๋กœ ์ถ”์ถœํ•˜๋ฉด ํ…์ŠคํŠธ์˜ ์—ญ์ˆœ๊ฐ’์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

โšก โ€˜ _ โ€˜ ํ™œ์šฉ

_ ๊ธฐํ˜ธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ for๋ฌธ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ _ ๊ธฐํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ฐ˜๋ณต๋ฌธ์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ’์€ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๋œป์ด ๋ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” 6ํ–‰์˜ range(len(world_list))์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ’์„ ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— _๋กœ ํ• ๋‹น๋ฐ›์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

> ํ

ํ(queue) : First in First Out(FIFO) ๋ฉ”๋ชจ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

ex) ์€ํ–‰ ๋Œ€๊ธฐ ๋ฒˆํ˜ธํ‘œ - ๋จผ์ € ์˜จ ์‚ฌ๋žŒ์ด ์•ž์˜ ๋ฒˆํ˜ธํ‘œ๋ฅผ ๋ฝ‘๊ณ , ๋ฒˆํ˜ธ๊ฐ€ ๋น ๋ฅธ ์‚ฌ๋žŒ์ด ๋จผ์ € ์„œ๋น„์Šค๋ฅผ ๋ฐ›๋Š” ๊ตฌ์กฐ

 

- ์Šคํƒ๊ณผ์˜ ์ฐจ์ด

์Šคํƒ : ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‹œ์ž‘ํ•˜๋Š” ์ ์ด ๊ณ ์ •๋˜์–ด ์žˆ์Œ

ํ : ์ฒ˜์Œ์— ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๊ฐ’์ด ์‚ฌ์šฉ๋จ์— ๋”ฐ๋ผ ๊ณ„์† ๋ฐ”๋€œ โ†’ ๊ตฌํ˜„์ด ๋” ๋ณต์žก

 

- ๊ตฌํ˜„ ๋ฐฉ์‹

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.pop(0)
1
>>> a.pop(0)
2

 

03 ํŠœํ”Œ๊ณผ ์„ธํŠธ

> ํŠœํ”Œ

 

ํŠœํ”Œ(tuple) : ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ ๊ฐœ๋…์ด์ง€๋งŒ ๊ฐ’ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ŠคํŠธ

 

- ์„ ์–ธ๊ณผ ์‚ฌ์šฉ

>>> t = (1, 2, 3)
>>> print(t + t , t * 2)
(1, 2, 3, 1, 2, 3) (1, 2, 3, 1, 2, 3)
>>> len(t)
3

1ํ–‰ : ํŠœํ”Œ ์„ ์–ธ. ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ t = (1, 2, 3)๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

2~3ํ–‰ : ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ, ์ธ๋ฑ์‹ฑ, ์Šฌ๋ผ์ด์‹ฑ์ด ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

- ๊ฐ’ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€

โ—ํŠœํ”Œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ

๋งจ ์•„๋ž˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ : โ€™ํŠœํ”Œ ์˜ค๋ธŒ์ ํŠธ์—๋Š” ์ƒˆ๋กœ์šด ์•„์ดํ…œ์˜ ํ• ๋‹น์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.โ€™

โ†’ ํŠœํ”Œ์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•!

 

 

- ๊ฐ’์ด ํ•˜๋‚˜์ธ ํŠœํ”Œ ์„ ์–ธ

t = (1)  # ๋ณ€์ˆ˜ t ์„ ์–ธ์œผ๋กœ ์ดํ•ด
t = (1, )  # ํŠœํ”Œ ์„ ์–ธ

 

 

> ์„ธํŠธ

 

์„ธํŠธ(set) : ๊ฐ’์„ ์ˆœ์„œ ์—†์ด ์ €์žฅํ•˜๋˜ ์ค‘๋ณต์„ ๋ถˆํ—ˆํ•˜๋Š” ์ž๋ฃŒํ˜•

โ†’ โ€˜์ค‘๋ณต์„ ๋ถˆํ—ˆํ•˜๋Š”โ€™ ๊ธฐ๋Šฅ ๋•๋ถ„์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ž„

 

- ์„ ์–ธ๊ณผ ์‚ฌ์šฉ

>>>s = set([1, 2, 3, 1, 2, 3])
>>>s
{1, 2, 3}

์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  set( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด ํ•ด๋‹น ๊ฐ’์ด ์„ธํŠธ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ ํ›„ ์„ธํŠธ๋กœ ๋ณ€ํ™˜๋˜์–ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

- ๊ฐ’ ์‚ญ์ œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

[์‹ค์Šต] ์„ธํŠธ๋Š” ํŠœํ”Œ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์‚ญ์ œ๋‚˜ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

>>> 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)
>>> 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, ])
{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}

ํ•ฉ์ง‘ํ•ฉ : union( ), |

๋‘ ์ง‘ํ•ฉ์˜ ์ค‘๋ณต๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  ํ•ฉ์น˜๋Š” ์—ฐ์‚ฐ

๊ต์ง‘ํ•ฉ : intersection( ), &

๋‘ ์ง‘ํ•ฉ ์–‘์ชฝ์— ๋ชจ๋‘ ํฌํ•จ๋œ ๊ฐ’๋งŒ ์ถ”์ถœํ•˜๋Š” ์—ฐ์‚ฐ

์ฐจ์ง‘ํ•ฉ: difference( ), -

์•ž์— ์žˆ๋Š” ์ง‘ํ•ฉ์˜ ์›์†Œ ์ค‘์— ๋’ค์˜ ์ง‘ํ•ฉ์— ํฌํ•จ๋œ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์—ฐ์‚ฐ

 

04 ๋”•์…”๋„ˆ๋ฆฌ

> ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฐœ๋…

- ๋”•์…”๋„ˆ๋ฆฌ๋Š” ์˜์–ด์‚ฌ์ „์—์„œ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ์˜์–ด ๋‹จ์–ด๋“ค์„ ์ €์žฅํ•ด ๋†“์€ ๋ฐฉ์‹๊ณผ ๋น„์Šท!

- ์˜์–ด์‚ฌ์ „์—์„œ๋Š” ๊ฐ ๋‹จ์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒ‰์ธ index์„ ๋งŒ๋“ค์–ด ๋†“๊ณ  ์ƒ‰์ธ์„ ํ†ตํ•ด ๊ทธ ๋‹จ์–ด๋ฅผ ์ฐพ์•„ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•œ๋‹ค. โ†’ ์ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€

- ํŒŒ์ด์ฌ์˜ ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ ์ผํ•œ ๊ตฌ๋ถ„์ž์ธ ํ‚ค key๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค

- ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ’value ์ด๋ผ๋Š” ์ด๋ฆ„๊ณผ ์Œ์œผ๋กœ ์ €์žฅํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

>> ํŒŒ์ด์ฌ์—์„œ์˜ ๋”•์…”๋„ˆ๋ฆฌ

๋”•์…”๋„ˆ๋ฆฌ ๋ณ€์ˆ˜ = { ํ‚ค 1:๊ฐ’ 1, ํ‚ค 2:๊ฐ’ 2, ํ‚ค 3:๊ฐ’ 3, ... }

: ํ‚ค ์™€ ๊ฐ’ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค!

 

- ํŠน์ง•

  • ๊ฐ’์—๋Š” ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ์„ธํŠธ, ๋”•์…”๋„ˆ๋ฆฌ๊นŒ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

- ์„ ์–ธ๊ณผ ์‚ฌ์šฉ

>>> student_info = {2023111222:'hanni', 2023111333:'jenni', 2023111444:'lily'}
>>> student_info[2022111333]
>>> 'Jenni'
  • ํ‚ค๋Š” ๋ฌธ์ž์—ด๋กœ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ •์ˆ˜ํ˜•์œผ๋กœ๋„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ด๋‹น ํ‚ค๋ฅผ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ์–ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ •์ˆ˜ํ˜•์œผ๋กœ ์„ ์–ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •์ˆ˜ํ˜•์œผ๋กœ ํ˜ธ์ถœํ•œ๋‹ค.

- ์žฌํ• ๋‹น๊ณผ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

>>> student_info[2023111222]= 'hanni'
>>> student_info[2023111222]
'hanni'
>>> student_info[2023111555]= 'minji'
>>> student_info
{2023111222: 'hanni', 2023111333:'jenni', 2023111444:'lily', 2022111555:'lily'}}
  • ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ๋œ๋‹ค.

 

> ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ•จ์ˆ˜

- 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([('America'), ('Korea', 82), ('China', 86), ('Japan', 81), ('German', 49)])

- ๋”•์…”๋„ˆ๋ฆฌ์™€ for๋ฌธ

>>> for k, v in country_code.items():
... print("Key:", k)
... print("Value:", v)

- ๋”•์…”๋„ˆ๋ฆฌ์™€ if๋ฌธ

>>> "Korea" in country_code.keys()
True
>>> 82 in country_code.values()
True

 

05 collections ๋ชจ๋“ˆ

> ๋ชจ๋“ˆ์˜ ๊ฐœ๋…

 

collections ๋ชจ๋“ˆ : ํŒŒ์ด์ฌ์˜ ๋‚ด์žฅ ์ž๋ฃŒ๊ตฌ์กฐ

โ†’ ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ๋”•์…”๋„ˆ๋ฆฌ ๋“ฑ์„ ํ™•์žฅํ•˜์—ฌ ์ œ์ž‘๋œ ํŒŒ์ด์ฌ์˜ ๋‚ด์žฅ ๋ชจ๋“ˆ

โ†’ ๊ธฐ์กด์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ณด๋‹ค ํšจ์œจ์ ์ด๊ณ  ํŽธ๋ฆฌ

 

์ž๋ฃŒ๊ตฌ์กฐ ํ˜ธ์ถœ ์ฝ”๋“œ

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])

1ํ–‰ - import

3ํ–‰ - ๋ฆฌ์ŠคํŠธ์™€ ๋น„์Šทํ•œ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ

4ํ–‰ - append( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋Š˜๋ฆฌ๋ฉด์„œ ์Œ“์ž„

 

[์Šคํƒ]

>>> deque_list.pop()
4
>>> deque_list.pop()
3
>>> deque_list.pop()
2
>>> deque_list
deque([0, 1])

deque_list.pop ์ˆ˜ํ–‰ ์‹œ ์˜ค๋ฅธ์ชฝ ์š”์†Œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ถ”์ถœ๋จ

โ†’ ์Šคํƒ๊ณผ ๊ฐ™์ด ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๊ฐ’์ด ๋จผ์ € ์ถ”์ถœ๋จ

 

[ํ]

>>> 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])

โ†’ pop(0) ๋Œ€์‹  appendleft( ) ํ•จ์ˆ˜๋กœ ์ƒˆ๋กœ์šด ๊ฐ’์„ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ž…๋ ฅํ•˜๋„๋ก ํ•˜์—ฌ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๊ฐ’๋ถ€ํ„ฐ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.

 

-์žฅ์  : ๊ธฐ์กด์˜ ๋ฆฌ์ŠคํŠธ์™€์˜ ๋น„๊ตํ•  ๋•Œ ๋ช‡ ๊ฐ€์ง€ ์žฅ์ ์ด ์žˆ๋‹ค. 

1) ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์„ฑ ์ง€์›

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ : ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์š”์†Œ์˜ ๊ฐ’์„ ํ•œ ์ชฝ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ํ›„, ์š”์†Œ์˜ ๋‹ค์Œ ๊ฐ’์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋ฒ•

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋‹ค์Œ ์š”์†Œ์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ˜•์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๋งˆ์ง€๋ง‰ ์š”์†Œ์— ์ฒซ ๋ฒˆ์งธ ๊ฐ’์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅ์‹œ์ผœ ํ•ด๋‹น ๊ฐ’์„ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ์‹œํ‚จ๋‹ค.

์ด๋Ÿฌํ•œ ํŠน์ง• ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ : rotate( ) ํ•จ์ˆ˜

rotate( ) : ๊ธฐ๋ณธ deque์— ์ €์žฅ๋œ ์š”์†Œ๋“ค ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”๊พธ๋Š” ๊ธฐ๋ฒ•

  • ์›ํ˜•์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์š”์†Œ์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ํ•˜๋‚˜์”ฉ ์˜ฎ๊ธด๋‹ค๋ฉด ์‹ค์ œ๋กœ ์š”์†Œ๋ฅผ ์˜ฎ๊ธฐ์ง€ ์•Š์•„๋„ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ์‹œ์ฝ”๋“œ
>>> 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)
>>> print(deqiie_list)
deque([3, 4, 0, 1, 2])
>>> deque_list.rotate(2)
>>> print(deque_list)
deque([1, 2, 3, 4, 0])

rotate(2) ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰์‹œํ‚ค๋ฉด ๊ฐ’์ด ๋‘ ์นธ์”ฉ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2) ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ์ œ๊ณต

  • reversed( ) ํ•จ์ˆ˜ - ๊ธฐ์กด๊ณผ ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • ์˜ˆ์‹œ์ฝ”๋“œ
...
>>>print(deque(reversed(deque_list)))
deque([0, 4, 3, 2, 1])

 

3) ๊ธฐ์กด์˜ ๋ฆฌ์ŠคํŠธ์—์„œ ์ง€์›ํ•˜๋Š” ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • 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])

4 )๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์  ์‚ฌ์šฉ๊ณผ ๋น ๋ฅธ ์†๋„

 

 

>>OrderedDict ๋ชจ๋“ˆ

ordered dictionary : ์ˆœ์„œ๋ฅผ ๊ฐ€์ง„ ๋”•์…”๋„ˆ๋ฆฌ

โ†’ ๊ธฐ์กด์˜ ๋”•์…”๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋ฉด ํ‚ค๋Š” ์ €์žฅ ์ˆœ์„œ์™€ ์ƒ๊ด€ ์—†์ด ์ €์žฅ๋œ๋‹ค.

โ†’ ํ•˜์ง€๋งŒ OrderedDict ๋ชจ๋“ˆ์€ ํ‚ค์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅ!

 

[๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค]

  • ์ €์žฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅ
from collections import OrderedDict # OrderedDict ๋ชจ๋“ˆ ์„ ์–ธ

d = OrderedDict()
d['x'] = 100
d['y'] = 200
d['z'] = 300
d['l'] = 500

for k, v in d.items():
    print(k, v)

์–ด๋–ค ์ปดํ“จํ„ฐ๋“  ์ƒ๊ด€ ์—†์ด x, y, z, l์˜ ์ˆœ์„œ๋Œ€๋กœ ํ‚ค-๊ฐ’ ์Œ์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

  • ํ‚ค์™€ ๊ฐ’ ์ •๋ ฌ 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( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ OrderedDict ๋ชจ๋“ˆ๋กœ ๊ฐ์‹ธ์ฃผ๋Š” ๋ฐฉ์‹

โ†’ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ์กด์˜ ๋”•์…”๋„ˆ๋ฆฌ๋‚˜ ๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋ฉด์„œ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ• ์ˆ˜ ์žˆ๋‹ค.

 

 

>>defaultdict Counter ๋ชจ๋“ˆ

defaultdict ๋ชจ๋“ˆ : ๋”•์…”๋„ˆ๋ฆฌ์˜ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ‚ค์— ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

โ†’ ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ณ„๋‹ค๋ฅธ ์กฐ์น˜ ์—†์ด ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

 

- ์„ ์–ธ๊ณผ ์‚ฌ์šฉ

d = dict()
print(d["first"])
from collections import defaultdict

d = defaultdict(lambda: 0) # Default ๊ฐ’์„ ์„ค์ •
print(d["first"])

3ํ–‰ d = defaultdict(lambda: 0) : defaultdict ๋ชจ๋“ˆ์„ ์„ ์–ธํ•˜๋ฉด์„œ ๋™์‹œ์— ์ดˆ๊นƒ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•œ ๊ฒƒ

lambda(0) ํ•จ์ˆ˜ : ์–ด๋–ค ํ‚ค๊ฐ€ ๋“ค์–ด์˜ค๋”๋ผ๋„ ์ฒ˜์Œ ๊ฐ’์€ ์ „๋ถ€ 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.

 

- ์žฅ์  : ์ฝ”๋“œ์˜ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

>>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, 'I': 2, 'g': 1, 'h': 1, 'd': 1})
>>> c["a"]
3

 

>>namedtuple ๋ชจ๋“ˆ

namedtuple ๋ชจ๋“ˆ : ํŠœํ”Œ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

โ†’ ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ํ•˜๋‚˜์˜ ํŠœํ”Œ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•ด ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

 

- ์„ ์–ธ๊ณผ ์‚ฌ์šฉ

>>> 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