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

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

onegyul 2023. 5. 11. 23:26

7์ฐจ์‹œ_์ž๋ฃŒ๊ตฌ์กฐ_๊ณผ์ œ.pdf
3.49MB

7์ฃผ์ฐจ ๊ฐ•์˜ ์ฃผ์ œ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

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

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

  • ์ž๋ฃŒ๊ตฌ์กฐ data structure : ํŠน์ง•์ด ์žˆ๋Š” ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํšจ์œจ์ ์œผ๋กœ ์ €์žฅ ๋ฐ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
  • ๋Œ€์šฉ๋Ÿ‰์ผ์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ์— ๋นจ๋ฆฌ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

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

ํŒŒ์ด์ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜๋“ค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•œ ํ‘œ๋Š” ๊ฐ•์˜์•ˆ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

์—ด๊ฑฐํ•œ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐฐ์šฐ๋ฉฐ ์‹ค์ œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

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

1. ์Šคํƒ

  • Last In First Out(LIFO), ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋Š” ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๊ณต๊ฐ„์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ ๋ฆฌ์ŠคํŠธ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์ €์žฅ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ํ˜•ํƒœ๋ฅผ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ ๋ผ๊ณ  ํ•จ
  • ํ‘ธ์‹œ(push) : ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ / ํŒ(pop) : ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ

ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ์ €์žฅ ๊ณต๊ฐ„์„ ๋งŒ๋“  ํ›„ append( ) ํ•จ์ˆ˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  pop( ) ํ•จ์ˆ˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.

a = [1, 2, 3, 4, 5]
a.append(10)
print(a)
a.append(20)
print(a)
print(a.pop()) # ์ถ”์ถœ๊ณผ ๋™์‹œ์— ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ญ์ œ
print(a.pop())

# ์ถœ๋ ฅ๊ฒฐ๊ณผ
[1, 2, 3, 4, 5, 10]
[1, 2, 3, 4, 5, 10, 20]
20
10

์Šคํƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • '์ด์ง„์ˆ˜ ๋ณ€ํ™˜๊ธฐ' ํ”„๋กœ๊ทธ๋žจ : 2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’์„ ์Šคํƒ์— ํ‘ธ์‰ฌํ•œ ํ›„ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด์˜จ ๊ฐ’๋ถ€ํ„ฐ ํŒ์œผ๋กœ ์ถ”์ถœํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.
  • ํ…์ŠคํŠธ ์—ญ์ˆœ ์ถ”์ถœ ํ”„๋กœ๊ทธ๋žจ
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])
  • _ ๊ธฐํ˜ธ : for๋ฌธ์— _ ๊ธฐํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ฐ˜๋ณต๋ฌธ์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ’์€ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค.
  • for _ in range(len(world_list)): ์ฝ”๋“œ์—์„œ๋Š” range(len(world_list))์—์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ’์„ ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ _๋กœ ํ• ๋‹น๋ฐ›์€ ๊ฒƒ์ด๋‹ค.

2. ํ

  • First In First Out(FIFO), ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

ํŒŒ์ด์ฌ์—์„œ ํ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•˜๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์Šคํƒ์˜ ๊ตฌํ˜„๊ณผ ๊ฐ™๋‹ค.

pop( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ธ๋ฑ์Šค๊ฐ€ 0๋ฒˆ์งธ์ธ ๊ฐ’์„ ์“ด๋‹ค๋Š” ์˜๋ฏธ๋กœ pop(0)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

a = [1, 2, 3, 4, 5]
a.append(10)
a.append(20)
print(a.pop(0))  # 1
print(a.pop(0))  # 2

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

1. ํŠœํ”Œ

  • ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ ๊ฐœ๋…์ด์ง€๋งŒ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ŠคํŠธ๋กœ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค
t = (1, 2, 3)
print(t+t, t*2)
(1, 2, 3, 1, 2, 3) (1, 2, 3, 1, 2, 3)
print(len(t))
3

2. ์„ธํŠธ

  • ๊ฐ’์„ ์ˆœ์„œ์—†์ด ์ €์žฅํ•˜๋˜ ์ค‘๋ณต์„ ๋ถˆํ—ˆํ•˜๋Š” ์ž๋ฃŒํ˜•
  • ๋ฌธ์„œ ํ•˜๋‚˜์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๋‹จ์–ด ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์…€ ๋•Œ ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ์ถ”์ถœํ•œ ํ›„ ์„ธํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ๋‹จ์–ด ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ
s = set([1, 2, 3, 1, 2, 3])
print(s)
{1, 2, 3}
  • ์„ธํŠธ๋Š” ํŠœํ”Œ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์‚ญ์ œ๋‚˜ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•จ
print(s)   # {1, 2, 3}

s.add(1)
print(s)   # {1, 2, 3}

s.remove(1)
print(s)   # {2, 3}

s.update([1, 4, 5, 6, 7])
print(s)   # {1, 2, 3, 4, 5, 6, 7}

s.discard(3)
print(s)   # {1, 2, 4, 5, 6, 7}

s.clear()
print(s)   # set()
  • ํŒŒ์ด์ฌ์˜ ์„ธํŠธ๋Š” ๋‹ค์–‘ํ•œ ์ง‘ํ•ฉ ์—ฐ์‚ฐ์„ ์ œ๊ณตํ•จ
s1 = set([1, 2, 3, 4, 5])
s2 = set([3, 4, 5, 6, 7])

print(s1.union(s2))   # {1, 2, 3, 4, 5, 6, 7}
print(s1 | s2)   # {1, 2, 3, 4, 5, 6, 7}
print(s1.intersection(s2))   # {3, 4, 5}
print(s1 & s2)   # {3, 4, 5}
print(s1.difference(s2))   # {1, 2}
print(s1 - s2)   # {1, 2}

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

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

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

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

  • ์ค‘๊ด„ํ˜ธ { }๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค์™€ ๊ฐ’์„ ์Œ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ๋จ

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

 

  • ๊ฐ’์—๋Š” ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
student_info = {20140012:'Sungshul',20140059:'Jiyong',20140058:'Jaehong'}

print(student_info[20140012])  # 'Sungchul' ์ถœ๋ ฅ

ํ•ด๋‹น ๊ฐ’์˜ ํ‚ค๋ฅผ ๋Œ€๊ด„ํ˜ธ [ ] ์•ˆ์— ๋„ฃ์–ด ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค. ํ‚ค๋Š” ๋ฌธ์ž์—ด๋กœ๋„, ์ •์ˆ˜ํ˜•์œผ๋กœ๋„ ์„ ์–ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ์žฌํ• ๋‹น๊ณผ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
student_info[20140012] = 'Sungchul'
print(student_info[20140012])  # 'Sungchul' ์ถœ๋ ฅ

student_info[20140039] = 'Wonchul'
print(student_info)
# ์ถœ๋ ฅ๊ฒฐ๊ณผ
{20140012: 'Sungchul', 20140059: 'Jiyong', 20140058: 'Jaehong', 20140039: 'Wonchul'}

3. ๋”•์…”๋„ˆ๋ฆฌ ํ•จ์ˆ˜

country_code = {}
country_code = {"America": 1, "Korea": 82, "China": 86, "Japan": 81}
print(country_code)

# ์ถœ๋ ฅ๊ฒฐ๊ณผ
{'America': 1, 'Korea': 82, 'China': 86, 'Japan': 81}
print(country_code.keys())  # ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค๋งŒ ์ถœ๋ ฅ
## dict_keys(['America', 'Korea', 'China', 'Japan'])

country_code["German"] = 49  # ๋”•์…”๋„ˆ๋ฆฌ ์ถ”๊ฐ€
print(country_code)
## {'America': 1, 'Korea': 82, 'China': 86, 'Japan': 81, 'German': 49}
print(country_code.values())  # ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฐ’๋งŒ ์ถœ๋ ฅ
## dict_values([1, 82, 86, 81, 49])

print(country_code.items())  # ๋”•์…”๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ
## dict_items([('America', 1), ('Korea', 82), ('China', 86), ('Japan', 81), ('German', 49)])
  • keys( ) : ํ‚ค๋งŒ ์ถœ๋ ฅ, ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ๋จ
  • values( ) : ๊ฐ’๋งŒ ์ถœ๋ ฅ
  • items( ) : ํ‚ค-๊ฐ’ ์Œ์„ ๋ชจ๋‘ ์ถœ๋ ฅ
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
Value: 49
  • for๋ฌธ์œผ๋กœ ํ‚ค-๊ฐ’ ์Œ ์ถœ๋ ฅ
print("Korea" in country_code.keys())  # ํ‚ค์— "Korea"๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
print(82 in country_code.values())  # ๊ฐ’์— 82๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ

True
True
  • if๋ฌธ์œผ๋กœ ํŠน์ • ํ‚ค๋‚˜ ๊ฐ’์ด ํ•ด๋‹น ๋ณ€์ˆ˜์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ

05. collections ๋ชจ๋“ˆ

ํŒŒ์ด์ฌ์˜ ๋‚ด์žฅ ์ž๋ฃŒ๊ตฌ์กฐ ๋ชจ๋“ˆ์ธ collections์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

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

1. 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( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋Š˜๋ฆฌ๋ฉด์„œ ์Œ“์ž„
print(deque_list.pop())
print(deque_list.pop())
print(deque_list.pop())
print(deque_list)

# ์ถœ๋ ฅ๊ฒฐ๊ณผ
4
3
2
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]) ์ถœ๋ ฅ
  • appendleft( ) : ์ƒˆ๋กœ์šด ๊ฐ’์„ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ž…๋ ฅํ•˜๋„๋ก ํ•˜์—ฌ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๊ฐ’๋ถ€ํ„ฐ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
  • deque ๋ชจ๋“ˆ์€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(linked list)์˜ ํŠน์„ฑ์„ ์ง€์›ํ•œ๋‹ค. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์š”์†Œ์˜ ๊ฐ’์„ ํ•œ ์ชฝ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ํ›„, ์š”์†Œ์˜ ๋‹ค์Œ ๊ฐ’์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.
  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ˜•์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์š”์†Œ์— ์ฒซ ๋ฒˆ์งธ ๊ฐ’์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅ์‹œ์ผœ ํ•ด๋‹น ๊ฐ’์„ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ์‹œํ‚จ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง• ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๊ฐ€ rotate( ) ํ•จ์ˆ˜์ด๋‹ค.
  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์–‘์ชฝ ๋์˜ ์š”์†Œ๋“ค์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์›ํ˜• ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ์š”์†Œ์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ํ•˜๋‚˜์”ฉ ์˜ฎ๊ธด๋‹ค๋ฉด ์‹ค์ œ๋กœ ์š”์†Œ๋ฅผ ์˜ฎ๊ธฐ์ง€ ์•Š๋”๋ผ๋„ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
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.rotate(2)
print(deque_list) # deque([3, 4, 0, 1, 2]) ์ถœ๋ ฅ

deque_list.rotate(2)
print(deque_list) # deque([1, 2, 3, 4, 0]) ์ถœ๋ ฅ
  • rotate( ) : ๊ธฐ์กด deque์— ์ €์žฅ๋œ ์š”์†Œ๋“ค ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”๊พธ๋Š” ๊ธฐ๋ฒ•
  • rotate(2) ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰์‹œํ‚ค๋ฉด 3๊ณผ 4์˜ ๊ฐ’์ด ๋‘ ์นธ์”ฉ ์ด๋™ํ•˜์—ฌ 0๋ฒˆ์งธ, 1๋ฒˆ์งธ ์ธ๋ฑ์Šค๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค. ๋‹ค์‹œ rotate(2)๋ฅผ ์ˆ˜ํ–‰์‹œํ‚ค๋ฉด 1๊ณผ 2๊ฐ€ 0๋ฒˆ์งธ, 1๋ฒˆ์งธ ์ธ๋ฑ์Šค๋กœ ์ด๋™ํ•œ๋‹ค.
print(deque(reversed(deque_list))) 
# deque([0, 4, 3, 2, 1]) ์ถœ๋ ฅ
  • reversed( ) : ๊ธฐ์กด๊ณผ ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ
deque_list.extend([5, 6, 7])
print(deque_list)

deque_list.extendleft([5, 6, 7])
print(deque_list)

# ์ถœ๋ ฅ๊ฒฐ๊ณผ
deque([1, 2, 3, 4, 0, 5, 6, 7])
deque([7, 6, 5, 1, 2, 3, 4, 0, 5, 6, 7])
  • extend( ), extendedleft( ) : ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ†ต์งธ๋กœ ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์™ผ์ชฝ์œผ๋กœ ์ถ”๊ฐ€๋จ

2. OrderedDict ๋ชจ๋“ˆ

  • OrderedDict ๋ชจ๋“ˆ : ์ˆœ์„œ๋ฅผ ๊ฐ€์ง„ ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ์ฒด ๋”•์…”๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋ฉด ํ‚ค๋Š” ์ €์žฅ ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ์ €์žฅ๋จ
d = {}
d['x'] = 100
d['l'] = 500
d['y'] = 200
d['z'] = 300

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

# ์ถœ๋ ฅ๊ฒฐ๊ณผ
x 100
l 500
y 200
z 300
  • OrederedDict ๋ชจ๋“ˆ์€ ํ‚ค์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ €์žฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.
from collections import 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 100
y 200
z 300
l 500
  • ์ˆœ์„œ๋Œ€๋กœ ํ‚ค-๊ฐ’ ์Œ์ด ์ถœ๋ ฅ๋œ๋‹ค.
  • ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ํ‚ค๋‚˜ ๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ๋•Œ OrderedDict ๋ชจ๋“ˆ์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๋ฅผ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ž
def sort_by_key(t):
    return t[0]

from collections import 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

3. defaultdict ๋ชจ๋“ˆ

  • ๋”•์…”๋„ˆ๋ฆฌ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ‚ค์— ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ƒˆ๋กœ์šด ํ‚ค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ณ„๋‹ค๋ฅธ ์กฐ์น˜ ์—†์ด ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ
from collections import defualtdict

d = defaultdict(lambda: 0)
print(d["first"])  # 0 ์ถœ๋ ฅ

4. Counter ๋ชจ๋“ˆ

  • ์‹œํ€€์Šค ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฆฌ์ŠคํŠธ๋‚˜ ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€ ์‹œํ€€์Šค ์ž๋ฃŒํ˜•์— ์ €์žฅ๋œ ์š”์†Œ ์ค‘์—์„œ ๊ฐ™์€ ๊ฐ’์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ๊ทธ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•จ
  • ๋‹จ์ˆœํžˆ ์‹œํ€€์Šค ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„ธ๋Š” ์—ญํ• ๋„ ํ•˜์ง€๋งŒ, ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋‚˜ ํ‚ค์›Œ๋“œ ํ˜•ํƒœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Counter๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

5. namedtuple ๋ชจ๋“ˆ

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

Point = namedtuple('Point',['x', 'y'])
p = Point(11, y=22)
print(p)  # Point(x=11, y=22) ์ถœ๋ ฅ

์‹ค์Šต : ํ…์ŠคํŠธ ๋งˆ์ด๋‹ ํ”„๋กœ๊ทธ๋žจ

๋”•์…”๋„ˆ๋ฆฌ์™€ collections ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ๋งˆ์ด๋‹ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด์ž.

text mining : ํ…์ŠคํŠธ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์˜๋ฏธ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š” ๊ณผ์ • ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ ๋ฌธ์žฅ์—์„œ ๋‹จ์–ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ์ถœํ˜„ํ•˜๋Š”์ง€ ๋ถ„์„ํ•จ → defaultdict ๋ชจ๋“ˆ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์žฅ์— ์žˆ๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ ํŒŒ์•… ๊ฐ€๋Šฅ

์ž‘์„ฑ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋ฌธ์žฅ์˜ ๋‹จ์–ด ๊ฐœ์ˆ˜๋ฅผ ํŒŒ์•…ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • defaultdict ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋‹จ์–ด์˜ ์ถœํ˜„ํšŸ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด OrderedDict ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ์€ ๊ฐ•์˜์•ˆ์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”.