Python 3.9.5 ๋ฒ์ ์ ์ฌ์ฉํ์ต๋๋ค.
๋ฐ์ดํฐ ๊ตฌ์กฐ(Data Structure)๋?
๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ํ๋์ ์งํฉ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ(structure) ์ ๋๋ค. ์ด์ ์ ๋ณ์์ ์ซ์๋ ๋ฌธ์ ํํ์ ๋ฐ์ดํฐ ํ์ ์ ์ ์ฅํ์๋๋ฐ... ๊ณผ์ผ๋ค์ ์งํฉ ์ฒ๋ผ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ณ์๋ก ์ ์ธ์ ํด์ค์ผํ ๊น์?
# ๊ฐ๊ฐ ๋ณ์๋ก ์ ์ธ
fruit1 = '์๋ฐ'
fruit2 = '์ฐธ์ธ'
fruit3 = '์๋ชฝ'
fruit4 = '๋ฉ๋ก '
# ๋ฐ์ดํฐ ๊ตฌ์กฐ์ธ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํด์ ์ ์ธ
fruits = ['์๋ฐ', '์ฐธ์ธ', '์๋ชฝ', '๋ฉ๋ก ']
์์ ์ด๋ฏธ์ง๋ฅผ ์ฝ๋ํํ ๋ด์ฉ์ ๋๋ค. ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ฐ ๋ณ์๋ก ๋ง๋ค์ง ์๊ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ค ํ๋์ธ list๋ฅผ ๋ง๋ค์ด์ ํ๋์ ๋ณ์์์ ๊ด๋ฆฌํ๋ฉด ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Python์ ๋ฐ์ดํฐ ๊ตฌ์กฐ
Python์์ ์ ๊ณตํด์ฃผ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ต๋๋ค.
- List
- Tuple
- Set
- Dictionary
์ด๋ฒ ๊ธ์์๋ ์ 4๊ฐ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
List (๋ฆฌ์คํธ)
๋ค๋ฅธ ์ธ์ด์์๋ Array(๋ฐฐ์ด)๋ผ๊ณ ํฉ๋๋ค. ์ํ์ ์๋ฏธ์์์ ๋ฐฐ์ด๊ณผ ๊ฐ์ด ์๊ฐํ์๋ฉด ๋ ๊ฒ ๊ฐ๊ณ ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฅํด์ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค.
List ์ฝ๊ธฐ
# ๊ณผ์ผ์ ๋ด์ ๋ฆฌ์คํธ
fruits = ['์๋ฐ', '์ฐธ์ธ', '์๋ชฝ', '๋ฉ๋ก ']
# len ํจ์๋ฅผ ํตํด ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
print(len(fruits)) # 4
print(fruits[0]) # ์๋ฐ
print(fruits[1]) # ์ฐธ์ธ
print(fruits[2]) # ์๋ชฝ
print(fruits[3]) # ๋ฉ๋ก
print(fruits[4]) # IndexError: list index out of range
print(fruits[-1]) # ๋ฉ๋ก
print(fruits[-2]) # ์๋ชฝ
print(fruits[-3]) # ์ฐธ์ธ
print(fruits[-4]) # ์๋ฐ
print(fruits[-5]) # IndexError: list index out of range
๋ฆฌ์คํธ ํ์ ์ผ๋ก ์ ์๋ ๋ฐ์ดํฐ๋ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋๊ดํธ([])์ ์ธ๋ฑ์ค๋ฅผ ๋ฃ์ด์ ๊ฐ์ ํธ์ถ ํ ์ ์์ต๋๋ค. ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํด์ ๊ฐ์ ํธ์ถํ ๋ ์ฃผ์ํด์ผํฉ๋๋ค. ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ 4์ธ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ 0 ~ 3๊น์ง์ด๊ณ 4๋ฅผ ๋ฃ์ด์ ํธ์ถํ๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Python์๋ ์์์ ์ธ๋ฑ์ค๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ ์ธ๋ฑ์ค์๋ ๋ฐ๋๋ก -1๋ถํฐ ์์ํ๊ณ ๋ฆฌ์คํธ์ ๋์์๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ๋ฒ์ด๋๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
List ๋ฐ์ดํฐ ๋ด์ฅ๋ ํจ์๋ก ์ ์ด
# ๊ณผ์ผ์ ๋ด์ ๋ฆฌ์คํธ
fruits = ['์๋ฐ', '์ฐธ์ธ', '์๋ชฝ', '๋ฉ๋ก ']
# ๋ฆฌ์คํธ ๋์ ์ถ๊ฐ
fruits.append('๋ง๊ณ ')
print(fruits) # ['์๋ฐ', '์ฐธ์ธ', '์๋ชฝ', '๋ฉ๋ก ', '๋ง๊ณ ']
# ๋ฆฌ์คํธ ํน์ ์์น์ ์ฝ์
--> ์ง์ ํ ์ธ๋ฑ์ค์ ๊ฐ์ ์ ์ฅํ๋ค.
fruits.insert(2, '๋ง๊ณ ')
print(fruits) # ['์๋ฐ', '์ฐธ์ธ', '๋ง๊ณ ', '์๋ชฝ', '๋ฉ๋ก ', '๋ง๊ณ ']
# ๋ฆฌ์คํธ์์ ๊ฐ์ผ๋ก ์ ๊ฑฐ(์ฒซ๋ฒ ์งธ ๊ฐ ๋ง ์ ๊ฑฐ๋๋ค)
fruits.remove('๋ง๊ณ ')
print(fruits) # ['์๋ฐ', '์ฐธ์ธ', '์๋ชฝ', '๋ฉ๋ก ', '๋ง๊ณ ']
# ๋ฆฌ์คํธ์์ ์ธ๋ฑ์ค๋ก ๊ฐ ์ ๊ฑฐํ๊ณ ๋ฐํํ๋ค
print(fruits.pop(4)) # ๋ง๊ณ
print(fruits) # ['์๋ฐ', '์ฐธ์ธ', '์๋ชฝ', '๋ฉ๋ก ']
# ๋ฆฌ์คํธ ์ญ์์ผ๋ก ์ฌ๋ฐฐ์นํ๋ค.
fruits.reverse()
print(fruits) # ['๋ฉ๋ก ', '์๋ชฝ', '์ฐธ์ธ', '์๋ฐ']
# ๋ฆฌ์คํธ์ ๋ชจ๋ ๊ฐ์ ์ ๊ฑฐํ๋ค.
fruits.clear()
print(fruits) # []
๋ฆฌ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ฅ๋์ด ์๋ ํจ์๋ก ์ ์ดํ ์ ์์ต๋๋ค. ๊ฐ๊ฐ ์ค๋ช ์ ์ค์ต์ผ๋ก ๋์ฒดํ๊ฒ ์ต๋๋ค.
Python Slicing ๊ฐ๋
Python์๋ List ์ฒ๋ผ ์ฐ์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด๋ค์ slicing์ด๋ผ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. slicing์ ์๋ฅด๋ค์ ์๋ฏธ๋ฅผ ๊ฐ๊ณ ์๋๋ฐ... ๋ง ๊ทธ๋๋ก ๋ฒ์๋ฅผ ์ง์ ํด์ ์ ํํ ์ ์๋ ๊ธฐ๋ฅ ์ ๋๋ค.
start : slicing์ ์์ ์์น (ํด๋น ์ธ๋ฑ์ค๋ ํฌํจํ๋ค.)
end : sliceing์ ๋ ์์น (ํด๋น ์ธ๋ฑ์ค๋ ํฌํจํ์ง ์๋๋ค.)
step : ํญ (์ธ๋ฑ์ค์ ์ฐจ์ด)
# ๊ณผ์ผ์ ๋ด์ ๋ฆฌ์คํธ
fruits = ['์๋ฐ', '์ฐธ์ธ', '์๋ชฝ', '๋ฉ๋ก ']
# ์ธ๋ฑ์ค 2 ์ ๊น์ง ๋ฒ์๋ก ํ๋ค.
print(fruits[:2]) # ['์๋ฐ', '์ฐธ์ธ']
# ์ธ๋ฑ์ค 2๋ฅผ ํฌํจํด์ ๋๊น์ง ๋ฒ์๋ก ํ๋ค.
print(fruits[2:]) # ['์๋ชฝ', '๋ฉ๋ก ']
# ์ธ๋ฑ์ค 1๋ถํฐ 4 ์ ๊น์ง ๋ฒ์๋ก ํ๋ค.
print(fruits[1:4]) # ['์ฐธ์ธ', '์๋ชฝ', '๋ฉ๋ก ']
# ์ธ๋ฑ์ค 0 ๋ถํฐ 4 ์ ๊น์ง ๋ฒ์๋ก ์ก๊ณ 2๊ฐ์ฉ ๊ฑด๋ ๋ด๋ค.
print(fruits[0:4:2]) # ['์๋ฐ', '์๋ชฝ']
์์ ๋ฅผ ํตํด์ ์ตํ๋ค.
๋ค๋ฅธ ์ธ์ด๋ฅผ ์ฌ์ฉํด๋ณด์ จ์ผ๋ฉด ๋๋ผ์๊ฒ ์ง๋ง... ์ด๋ฐ ๋ฌธ์์ด ๊ด๋ จ์ ์ด๋ Python์ด ๋ฌธ๋ฒ์ ์ผ๋ก ์ ๋ง ์ฝ๊ฒํ ์ ์์ต๋๋ค. Python์์ ํ์ค์ด๋ฉด ํด๊ฒฐํ ์ ์๋ ๊ฒ์ ๋ค๋ฅธ ์ธ์ด์์๋ 4~5 ์ค ์ ๋ ์์ฑํด์ผํฉ๋๋ค.
del ์์ฝ์ด
์ธ๋ฑ์ค๋ก ๋ฆฌ์คํธ์ ๊ฐ์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก del ์์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฆฌ์คํธ์ pop ๋ฉ์๋์์ ์ฐจ์ด๋ ๊ฐ์ ๋ฐํํด์ฃผ์ง ์๋ ๋ค๋ ์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ slicing์ ํตํด์ ๋ฒ์๋ก ๊ฐ์ ์ญ์ ํ ์ ์์ต๋๋ค.
# ๊ณผ์ผ์ ๋ด์ ๋ฆฌ์คํธ
fruits = ['์๋ฐ', '์ฐธ์ธ', '์๋ชฝ', '๋ฉ๋ก ']
# ์ธ๋ฑ์ค 1์ ๊ฐ์ ์ญ์ ํ๋ค.
del fruits[1]
print(fruits) # ['์๋ฐ', '์๋ชฝ', '๋ฉ๋ก ']
# ์ธ๋ฑ์ค 1๋ถํฐ 3 ์ ๊น์ง์ ๋ฒ์๋ฅผ ์ญ์ ํ๋ค.
del fruits[1:3]
print(fruits) # ['์๋ฐ']
# ๋ฆฌ์คํธ์ ๋ชจ๋ ๊ฐ์ ์ญ์ ํ๋ค. --> clearํจ์์ ๋๋ฑํฉ๋๋ค.
del fruits[:]
print(fruits) # []
์ค์ต์ ํตํด ํ์ธํ๋ค.
List ํ์ ์ฐธ์กฐ
x = 100
print(id(x)) # 4427777488
y = 100
print(id(y)) # 4427777488
Python์์๋ ๋ชจ๋ ๊ฒ์ด ์ค๋ธ์ ํธ๋ก ๋์ด ์๋ค๊ณ ํ์ต๋๋ค. ๊ทธ๋์ 100์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋๊ฐ์ ๋ณ์๊ฐ ๋ฐ๋ผ๋ณด๋ฉด ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ด ๋๋ค. ๋ฆฌ์คํธ๋ฅผ ์์ฑํด์ ์ฌ์ฉํ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ง... ๋ค๋ง ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ดํดํด์ผํ๋ ๋ถ๋ถ์ด ์์ต๋๋ค.
x = [1, 2, 3]
print(id(x)) # 4330506944
y = [1, 2, 3]
print(id(y)) # 4330825600
๋ณ์์ ์ซ์ํ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํด์คฌ์ ๋์ ๋ฌ๋ฆฌ... ๋๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ๊ฐ x์ y์ ํ ๋นํด ์คฌ์ ๋... ๋์ ๊ฐ์ ๊ฐ์ฒด์ผ๊น์? ์ ๋ต์ ๋ค๋ฅธ ๊ฐ์ฒด ์ ๋๋ค. ์ด๋ Python์์ ๋ด๋ถ์ ์ผ๋ก list ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋ณ์๋ฅผ ์ด๊ธฐํํด์ฃผ๋ฉด ๋ฌด์กฐ๊ฑด ๋ฉ๋ชจ๋ฆฌ์ ์๋กญ๊ฒ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ฒ๋ ํ ๊ฒ์ด๊ณ ์ด๋ ๊ฒ ํด์ผํ๋ ์ด์ ๋ ์์ต๋๋ค.
x = [1, 2, 3]
y = x
y.append(4)
print(x) # [1, 2, 3, 4]
print(y) # [1, 2, 3, 4]
x๋ผ๋ ๋ฆฌ์คํธ๋ฅผ ์ด๊ธฐํ ์์ผ์ฃผ๊ณ y๋ผ๋ ๋ณ์์ x์ ๋๊ฐ์ ๊ฐ์ด ๋ค์ด๊ฐ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ์คฌ์ต๋๋ค. x์ y๋ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ดํ ์ ์๋๋ก ํด์ผํ๋๋ฐ... x์ y๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๊ธฐ ๋๋ฌธ์ y๋ฅผ ๋ณ๊ฒฝํ๋๋ฐ x๋ ๋ณ๊ฒฝ๋ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ฃ . ์ซ์ํ ๋ฐ์ดํฐ ํ์ ์ฒ๋ผ ๋ง์ฝ ๋ฆฌ์คํธ์ ๊ฐ์ด ๊ฐ์ ๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉด... ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ทธ๋์ ๋ฆฌ์คํธ๋ ์ด๊ธฐํ ํด์ค ๋ ๋ง๋ค ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋นํฉ๋๋ค.
x = [1, 2, 3]
# ํจ์๋ฅผ ์ด์ฉํ ๋ฆฌ์คํธ ๋ณต์ฌ
y = x.copy()
y.append(4)
# slicing์ ์ด์ฉํ ๋ฆฌ์คํธ ๋ณต์ฌ
z = x[:]
z.append(5)
print(x) # [1, 2, 3, 4]
print(y) # [1, 2, 3]
print(z) # [1, 2, 3, 5]
์ด๋ฏธ ์กด์ฌํ๋ ๋ฆฌ์คํธ๋ฅผ ๋ณ๊ฐ์ ๊ฐ์ฒด๋ก ๋ณต์ฌํ๊ธฐ ์ํด Python์์๋ ์์ ๊ฐ์ด 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
๋ฆฌ์คํธ ์ฐ์ฐ
w = [1, 2, 3]
print(id(w)) # 4528143040
x = [3, 4, 5]
print(id(x)) # 4528461952
y = w + x
print(y) # [1, 2, 3, 3, 4, 5]
print(id(y)) # 4528462016
z = y * 2
print(z) # [1, 2, 3, 3, 4, 5, 1, 2, 3, 3, 4, 5]
print(id(z)) # 4528143232
๋ฆฌ์คํธ์์๋ ๋ํ๊ธฐ์ ๊ณฑ์ ์ฐ์ฐ์ ํ ์ ์์ต๋๋ค. ๋ฆฌ์คํธ์ ์ฐ์ฐ์ ํ๋ ๊ฒฝ์ฐ ๊ธฐ์กด ๊ฐ์ฒด์ ๊ฐ์ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ... ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํด์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํด์ค๋๋ค.
immutable๊ณผ mutable
๋ฐ์ดํฐ ํ์ ์ ๋ํ ๊ธ์์ ์ซ์, ๋ฌธ์ํ ๋ฐ์ดํฐ๋ ๋ณํ ์ ์๋(immutable) ๋ฐ์ดํฐ๋ผ๊ณ ์ค๋ช ํ ์ ์์ต๋๋ค. ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ๋ณํ ์ ์๋(mutable) ๋ฐ์ดํฐ ์ ๋๋ค.
x = [1, 2, 3]
print(id(x)) # 4377230016
x.append(4)
print(id(x)) # 4377230016
์์ ์์ ๋ณผ ์ ์๋ฏ์ด... ๋ฆฌ์คํธ์ 4๋ฅผ ๋ฃ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ๋ณํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์ฒด์ ์ฃผ์๋ ๊ทธ๋๋ก ๋๊ฐ์ต๋๋ค. ์ด๋ฐ๊ฒ mutableํ๋ค๋ ๋ป ์ ๋๋ค. ์ด๋ฒ์๋ mutableํ ๋ฆฌ์คํธ์ immutableํ ๋ฌธ์ํ ๋ฐ์ดํฐ ํ์ ์ ๋น๊ตํด์ ์ดํด๋ฅผ ๋๊ฒ ์ต๋๋ค.
# mutableํ list
x = [1, 2, 3]
print(id(x)) # 4425165504
x[-1] = 5
print(x) # [1, 2, 5]
print(id(x)) # 4425165504
# immutableํ ๋ฌธ์ํ ํ์
text = 'myjamong'
print(text[-1]) # g
text[-1] = 'a' # TypeError: 'str' object does not support item assignment
์์ ์์ ๋ณผ ์ ์๋ฏ์ด ๋ฆฌ์คํธ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ ๋ ๋๊ฐ์ ๊ฐ์ฒด ์ฃผ์๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ ํ์ธ ํ์ต๋๋ค. ์ด๋ ๋ฆฌ์คํธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ mutableํ๊ธฐ ๋๋ฌธ ์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ฌธ์ํ ๋ฐ์ดํฐ์ธ text ๋ณ์๋ ํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฌธ์ํ ๋ฐ์ดํฐ๋ ๋ฆฌ์คํธ์ฒ๋ผ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด์ ๋ฌธ์์ด์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋๋ฐ ์์ ํ๋ ๊ฒ์ ์๋ฉ๋๋ค. ์ด๋ ๋ฌธ์ํ ๋ฐ์ดํฐ ํ์ ์ immutableํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
List์ ๋ค์์ฑ
x = [1, 2.5, '์๋ชฝ', [1, 2, 3]]
Python์ List๋ ํ์ ์ ๋ํ ์ ํ์ด ์์ต๋๋ค. Java๋ C์ ๊ฒฝ์ฐ ํ๋์ ๋ฐฐ์ด์๋ ํ ๊ฐ์ง ํ์ ์ ๋ฐ์ดํฐ๋ง ๋ค์ด๊ฐ ์ ์๋๋ฐ Python์์๋ ๋ชจ๋ ํ์ ์ ๊ฐ์ด ๋ค๊ณ ์๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์์ ์์์ฒ๋ผ ์ ์, ์ค์, ๋ฌธ์์ด, ๋ฆฌ์คํธ์์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ด ๋ฆฌ์คํธ์ ๋ฃ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
list_2d = [
[1, 2, 3],
[4, 5],
[7, 8, 9]
]
๋ฐฐ์ด์์ ๋ฐฐ์ด์ ์ค์ฒฉํด์ ๋ฃ์ด์ 2์ฐจ 3์ฐจ ๋ฐฐ์ด ๋ฑ ๊ณ ์ฐจ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
list๋ python์ผ๋ก ๊ฐ๋ฐํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ ๊ฒ๋๋ค. ๊ทธ๋งํผ ์ค์ํ๋ ์ถฉ๋ถํ ์ดํดํ๊ณ ๋์ด๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
x = []
print(x) # []
x = list() # []
print(x)
๋น ๋ฆฌ์คํธ๋ฅผ ์์ฑํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ง ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ผํ ์ง ์ ํ์ง ์์์ ๋ ๋น ๋ฆฌ์คํธ๋ฅผ ์์ฑํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Tuple(ํํ)
Tuple์ immutableํ list์ ๋๋ค. list์ ๋๊ฐ์ด ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด์ ์ฝ์ ์ ์๊ณ ๋ฐ์ดํฐ๊ฐ ์์ฐจ์ ์ผ๋ก ๋์ด ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค.
# ์๊ดํธ๋ฅผ ์ด์ฉํ ํํ ์ด๊ธฐํ
t = (1, 2, 3, 4, 5)
print(type(t)) # <class 'tuple'>
print(t) # (1, 2, 3, 4, 5)
# ๊ดํธ ์๋ ํํ ์ด๊ธฐํ
t = 1, 2, 3, 4, 5
print(type(t)) # <class 'tuple'>
print(t) # (1, 2, 3, 4, 5)
๋ฆฌ์คํธ๋ ๋๊ดํธ๋ฅผ ์ด์ฉํด์ ์ ์ธํ๋ค๋ฉด... ํํ์ ์๊ดํธ๋ฅผ ์ด์ฉํ๊ฑฐ๋ ๊ดํธ ์์ด ์ฝค๋ง๋ฅผ ์ด์ฉํด์ ์ด๊ธฐํํ ์ ์์ต๋๋ค. ๋ฆฌ์คํธ์๋ ๋ค๋ฅด๊ฒ immutableํ๊ธฐ ๋๋ฌธ์ append๋ remove์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ์ง์ ์ธ๋ฑ์ค์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์๋ ์์ต๋๋ค.
๊ทธ๋ผ... ์ด๋ฐ ํํ์ ์ ์ฌ์ฉํ๋ ๊ฒ ์ผ๊น์? ์ immutableํ list๊ฐ ํ์ํ ๊ฒ ์ผ๊น์?
Tuple์ ์ฌ์ฉํ๋ ์ด์
import sys
import timeit
# list ์์ฑ ์๋
start_time = timeit.default_timer()
l = [1, 2, 3, 4, 5]
print('list ์์ฑ ์๋ : ', format(timeit.default_timer() - start_time, '.10f'))
# tuple ์์ฑ ์๋ : 0.0000008920
# tuple ์์ฑ ์๋
start_time = timeit.default_timer()
t = (1, 2, 3, 4, 5)
print('tuple ์์ฑ ์๋ : ', format(timeit.default_timer() - start_time, '.10f'))
# tuple ์์ฑ ์๋ : 0.0000005320
"""
list : 0.0000008920
tuple : 0.0000005320
--> tuple์ด list๋ณด๋ค ์ฝ 40% ๋น ๋ฅด๋ค.
"""
# list ๋ฐ์ดํฐ ์ ๊ทผ ์๋
start_time = timeit.default_timer()
print(l[1]) # 2
print('list ๋ฐ์ดํฐ ์ ๊ทผ ์๋ : ', format(timeit.default_timer() - start_time, '.10f'))
# list ๋ฐ์ดํฐ ์ ๊ทผ ์๋ : 0.0000039290
# tuple ๋ฐ์ดํฐ ์ ๊ทผ ์๋
start_time = timeit.default_timer()
print(t[1]) # 2
print('tuple ๋ฐ์ดํฐ ์ ๊ทผ ์๋ : ', format(timeit.default_timer() - start_time, '.10f'))
# tuple ๋ฐ์ดํฐ ์ ๊ทผ ์๋ : 0.0000029280
"""
list : 0.0000039290
tuple : 0.0000029280
--> tuple ์ด list๋ณด๋ค ์ฝ 25% ๋น ๋ฅด๋ค.
"""
# ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ๋น๊ต
print('list์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ : ', sys.getsizeof(l)) # list์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ : 120
print('tuple์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ : ', sys.getsizeof(t)) # tuple์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ : 80
"""
list : 120
tuple : 80
--> tuple์ด list ๋ณด๋ค ์ฝ 33% ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๋ ์ฐจ์งํ๋ค.
"""
์ฑ๋ฅ์ ์ฐจ์ด๊ฐ ์๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ์ฐจ์ด ์ ๋๋ค. list์๋ ๋ค๋ฅด๊ฒ tuple์ immutableํ๊ธฐ ๋๋ฌธ์ append๋ remove์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ดํ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ฒด์์ ๊ฐ๊ณ ์์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ๋ฉ๋ชจ๋ฆฌ์์๋ ์๋์ ์ ์ ์ ๊ณต๊ฐ์ ์ฐจ์งํ๊ฒ ๋ ๊ฒ์ด๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ํ์ํ ๋ ๋ ์ ์ ์๊ฐ์ด ์์๋ฉ๋๋ค.
์ ์์ ์์๋ sys์ timeit ๋ชจ๋์ ์ฌ์ฉํด์ list์ tuple์ ์์ฑ ์๋, ์ ๊ทผ ์๋ ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํฌ๊ธฐ๋ฅผ ๋น๊ต ํ์ต๋๋ค. ๋ฐ์ดํฐ์ ์์ด ํฌ์ง ์์ ๋ง์ ์ฐจ์ด๋ ์์ง๋ง... tuple์ด list ๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ํ์ฉํ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ์๋ก ์ฐจ์ด๋ ์ ์ ๋ฒ์ด์ง ๊ฒ ์ ๋๋ค.
์ด๋ฐ ์ด์ ๋ก ์์ฐจ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ... list๋ณด๋ค๋ tuple์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณผ ์ ์์ต๋๋ค.
tuple์ packing๊ณผ unpacking
tuple์ ๋ฐ์ดํฐ๊ฐ ๋ณํ์ง ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋์ง๋ง... ๋ฐ์ดํฐ ํ์ ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋ง์ด ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค. ๋ํ์ ์ธ ์๋ก tuple์ packing๊ณผ unpacking์ ์ด์ฉํ ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ์ ์ฌ์ฉํฉ๋๋ค.
# tuple packing
result = '์ํ', 100, '์์ด', 95.5
# tuple unpacking
math, m_score, english, e_score = result
# ํจ์์ ๋ฐํ๊ฐ์ tuple packing
def report(x, y):
result = '๋ถํฉ๊ฒฉ'
is_smart = False
if x + y > 90:
result = 'ํฉ๊ฒฉ'
is_smart = True
return result, is_smart, x + y
# ํจ์์ ๋ฐํ๊ฐ์ tuple unpacking
pass_result, smart_bool, score = report(50, 45)
print(pass_result, smart_bool, score) # ํฉ๊ฒฉ True 95
packing : ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด์ฃผ๋ ๊ฒ์ ํจํน์ด๋ผ๊ณ ํ๋๋ค. ์ฆ ํํ๋ก ๋ฐ์ดํฐ๋ค์ ํ ๋นํด์ฃผ๋ ๊ฒ์ด packing ์ ๋๋ค.
unpacking : ํํ์ ๋ฐ์ดํฐ๋ฅผ ํ์ด์ ๊ฐ๊ฐ ๋ณ์์ ํ ๋นํด์ฃผ๋ ๊ฒ์ด unpacking์ ๋๋ค.
์ด๋ฐ tuple์ packing๊ณผ unpacking์ ํจ์์ ๋ฐํ๊ฐ์ ์ฒ๋ฆฌํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํฉ๋๋ค. ํจ์์ ๋ํ ๋ด์ฉ์ ์ด ํ ๊ธ์์ ์์ธํ ๋ค๋ฃฐ ๊ฒ์ด๊ณ ์ง๊ธ์ "ํจ์๋ ๊ฒ์ด ์๋ค" ์ ๋๋ก๋ง ์ดํดํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ ์์ ์์๋ x, y๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๊ฒฉ ๋ถํฉ๊ฒฉ์ ๋ํ ๊ฒฐ๊ณผ์ ๋๋ํ์ง์ ์ฌ๋ถ์ ํฉ์ฐ ๊ฐ์ ๋ฐํํด์ฃผ๋ ํจ์(report)๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
returnํ ๋ 3๊ฐ์ ๊ฐ(result, is_smart, x + y)์ packingํด์ฃผ๊ณ ํจ์๋ฅผ ํธ์ถํด์ 3๊ฐ์ ๊ฐ์ unpackingํด์ 3๊ฐ์ ๋ณ์์(pass_result, smart_result, score) ํ ๋นํด์คฌ์ต๋๋ค.
์ฌ๋ฌ ๋ชจ๋์ ์์ฑ๋ ํจ์๋ค์ด ์ด๋ฐ์์ผ๋ก tuple์ packing๊ณผ unpacking์ ์ด์ฉํด์ ๊ฐ์ ๋ฐํํด์ฃผ๊ณ ์์ต๋๋ค. ์ ํ์ฉํ๋ฉด ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
tuple ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
# string type
t = 'jamong'
print(type(t)) # <class 'str'>
# tuple type
t = 'jamong',
print(type(t)) # <class 'tuple'>
๋ฐ์ดํฐ๊ฐ ํ๋๋ง ๋ค์ด ์๋ ํํ์ ์์ฑํ๊ณ ์๊ดํธ๋ฅผ ์ด์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๊ผญ ๋์ ','๋ฅผ ๋ถ์ฌ์ค์ผํ๋ค. ๋ถ์ฌ์ฃผ์ง ์์ผ๋ฉด ํํ์ด ์๋ ๋ค๋ฅธ ํ์ ์ผ๋ก ์ธ์ํ ์ ์์ต๋๋ค.
# tuple๋ด์ mutableํ ํ์
์ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
t = (100, 'text', ['apple', 'lemon'])
t[2][0] = 'grape'
print(t) # (100, 'text', ['grape', 'lemon'])
# tuple์ ๋ฐ์ดํฐ๋ immutableํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.
t[2] = ['watermelon'] # TypeError: 'tuple' object does not support item assignment
Python์ ๋ชจ๋ ๊ฒ์ด ์ค๋ธ์ ํธ๋ก ๋์ด ์๋ ํน์ง์ด ์๊ธฐ ๋๋ฌธ์... ์์ ์ฒ๋ผ tuple๋ด์ mutableํ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ ์์์ ์ผ๋ก ์ ์ ์์ต๋๋ค. tuple์ ๊ฐ๋ค์ด ๊ฐ ๊ฐ์ฒด๊ธฐ ๋๋ฌธ์... ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๊ณ ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ๋ค์ ๋ณ๊ฒฝํ๋ mutableํ ๋ฐ์ดํฐ๋ผ๋ฉด ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๊ฒ ์ฃ ?
Set(์ธํธ)
์ธํธ๋ ์์๊ฐ ์๊ณ ์ค๋ณต์ด ์๋ ๋ฐ์ดํฐ ์งํฉ์ ๋๋ค. ๊ณผ์ผ ๊ฐ๊ณ์์ ํ๋งคํ๊ณ ์๋ ๊ณผ์ผ๋ค์ ์ข ๋ฅ๋ฅผ ์๊ธฐ ์ํด ์ฌ์ฉํ๋ค๋๊ฐ... ํ์ฌ์์ ํ๋ก๊ทธ๋๋จธ๋ค์ด ์ฌ์ฉํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ข ๋ฅ๊ฐ ์ด๋ค๊ฒ์ด ์๋์ง ํ์ธํ๋ ๋ฑ ์ค๋ณต์ ์์ ๊ณ ์กด์ฌํ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
fruits = {'apple', 'lemon', 'watermelon', 'apple'}
print(type(fruits)) # <class 'set'>
print(fruits) # {'lemon', 'watermelon', 'apple'} ์์๊ฐ ์์ผ๋ฏ๋ก ์ถ๋ ฅ์ด ๋งค๋ฒ ๋ณ๊ฒฝ๋ฉ๋๋ค.
# ๋น ์ธํธ๋ ํจ์๋ฅผ ํตํด์๋ง ์์ฑํ ์ ์๋ค.
d = {}
print(type(d)) # <class 'dict'>
s = set()
print(type(s)) # <class 'set'>
print(s) # set()
์ธํธ๋ ์ค๊ดํธ๋ฅผ ์ด์ฉํด์ ์ด๊ธฐํํ ์ ์์ต๋๋ค. ํ์ง๋ง... ๋ค์์ ์์๋ณผ dictionary ํ์ ๋ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋น ์ธํธ๋ฅผ ์์ฑํ ๋๋ setํจ์๋ฅผ ๊ผญ ์ฌ์ฉํด์ผํฉ๋๋ค. ์ ์์ ์์ ๋ณผ ์ ์๋ฏ์ด fruits ์ธํธ์์ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์์๋ ๋งค๋ฒ ์คํํ ๋ ๋ง๋ค ๋ค๋ฅธ ๊ฐ์ ์ป๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
Set ๋ด์ฅ ํจ์ ์ ์ด
set๋ mutable ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
fruits = {'apple', 'lemon', 'watermelon', 'apple'}
print(fruits) # {'lemon', 'watermelon', 'apple'} ์์๊ฐ ์์ผ๋ฏ๋ก ์ถ๋ ฅ์ด ๋งค๋ฒ ๋ณ๊ฒฝ๋ฉ๋๋ค.
# ์ธํธ์ ์ถ๊ฐํ๊ธฐ
fruits.add('melon')
print(fruits) # {'apple', 'melon', 'lemon', 'watermelon'}
# ์ธํธ์ ๋ชจ๋ ์๋ฌ๋ฉํธ ์ถ๊ฐํ๊ธฐ
fruits.update(['grape', 'watermelon', 'mango'])
print(fruits) # {'melon', 'apple', 'lemon', 'mango', 'grape', 'watermelon'}
# ์ธํธ์์ ์ ๊ฑฐํ๊ธฐ(๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ฐ์ด ์ธํธ์ ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.)
fruits.remove('grape')
print(fruits) # {'apple', 'watermelon', 'lemon', 'mango', 'melon'}
# fruits.remove('grape') # KeyError: 'grape'
# ์ธํธ์์ ์ ๊ฑฐํ๊ธฐ(๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ฐ์ด ์ธํธ์ ์์ผ๋ฉด ์ญ์ ํ๋ค. ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.)
fruits.discard('watermelon')
print(fruits) # {'lemon', 'melon', 'mango', 'apple'}
fruits.discard('watermelon')
# ์ธํธ์์ ๋ฌด์์๋ก ๊ฐ์ ๋ฐํํ๊ณ ์ ๊ฑฐํ๋ค.
print(fruits.pop()) # ๋ฌด์์๋ก ๊ฐ์ด ๋์ค๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฐ์ด ๋์ฌ์ง ๋ชจ๋ฅธ๋ค.
# ์ธํธ์์ ๋ชจ๋ ๊ฐ์ ์ ๊ฑฐํ๋ค.
fruits.clear()
print(fruits) # set()
ํจ์๋ค์ ์ค์ต์ ํตํด ํ์ธํ๋ค.
์ธํธ์ ์งํฉ ์ฐ์ฐ
Python์ ์ธํธ๋ ์ฐ์ฐ๊ธฐํธ๋ค์ ํตํด์ ์งํฉ์ ๋ํ ์ฐ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
fruits1 = {'apple', 'lemon', 'watermelon', 'apple'}
fruits2 = {'apple', 'lemon'}
fruits3 = {'apple', 'lemon'}
fruits4 = {'apple', 'grape'}
"""
๋น๊ต ์ฐ์ฐ์ผ๋ก ํฌ๋ค ์๋ค์ ๊ฐ๋
์ผ๋ก ์ดํดํ๋ฉด ๋ฉ๋๋ค. subset
์ดํ, ์ด์ --> ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ํฌํจ
์ด๊ณผ, ๋ฏธ๋ง --> ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ฏธํฌํจ
"""
# fruits1์ด fruits2์ ์์์งํฉ์ธ๊ฐ?
print(fruits1 >= fruits2) # True
print(fruits1 > fruits2) # True
# fruits1์ด fruits2์ ๋ถ๋ถ์งํฉ์ธ๊ฐ?
print(fruits1 <= fruits2) # False
print(fruits1 < fruits2) # False
# fruits2๊ฐ fruits3์ ์์ ์งํฉ์ธ๊ฐ?
print(fruits2 >= fruits3) # True
# ๊ฐ์ ๊ฒฝ์ฐ๋ False
print(fruits2 > fruits3) # False
# ํฉ์งํฉ
print(fruits2 | fruits4) # {'grape', 'lemon', 'apple'}
# ๊ต์งํฉ
print(fruits2 & fruits4) # {'apple'}
# ์ฐจ์งํฉ
print(fruits1 - fruits2) # {'watermelon'}
# ์ฌ์งํฉ
print(fruits1 ^ fruits4) # {'grape', 'watermelon', 'lemon'}
์ค์ต์ ํตํด ์ง์ ํ์ธํด๋ณธ๋ค.
Dictionary(๋์ ๋๋ฆฌ)
๋ค๋ฅธ ์ธ์ด์์์ Map์ด๋ผ๋ ์ค๋ธ์ ํธ์ ๋์ผํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ๋๋ค. key, value๋ฅผ ์์ผ๋ก ๊ตฌ์ฑ๋ ์งํฉ์ ๋๋ค. list๋ tuple์ ์ธ๋ฑ์ค๊ฐ ์ซ์์ ํํ๋ก ๋์ด ์๋๋ฐ dictionary์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฌธ์ํ์ด๋ ์ซ์ํ์ฒ๋ผ immutableํ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ๋์ด ์์ต๋๋ค. ์ซ์๋ณด๋ค๋ ๋ฌธ์ํ์ผ๋ก key๋ฅผ ์ฌ์ฉํฉ๋๋ค.
d = {
'red': 'apple'
,'yellow': 'lemon'
,'purple': 'grape'
,'orange': 'mango'
}
print(type(d)) # <class 'dict'>
์ค๊ดํธ๋ฅผ ์ด์ฉํด์ Dictionary๋ฅผ ์ ์ธํด ์ค ์ ์๊ณ ์ธ๋ฏธ์ฝ๋ก (:)๋ฅผ ๊ธฐ์ค์ผ๋ก key:value ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
Dictionary ์ฝ๊ธฐ
d = {
'name': 'tom',
'age': 30,
'items': {
'pockets': 3,
'baskets': [
[
'grape',
'lemon'
],
[
'apple',
'watermelon'
]
]
},
1: 25
}
print(d['name']) # tom
print(d['items']['pockets']) # 3
print(d['items']['baskets'][1]) # ['apple', 'watermelon']
print(d[1]) # 25
dictionary๋ key์ ๊ฐ๋ง mutableํ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ์ง์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. value๋ก๋ ์ซ์ํ, ๋ฌธ์ํ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ด๋ list, set๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ค์ด๊ฐ์๋ ์์ต๋๋ค. dictionary์ key๊ฐ index์ ์ญํ ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ list๋ฅผ ์ฝ์๋ ๋ฐฉ๋ฒ์ฒ๋ผ ๋๊ดํธ๋ฅผ ์ด์ฉํด์ ์ ๊ทผํ ์ ์์ต๋๋ค.
Dictionary ์์ฑ ์์
a = {'name': 'jamong', 'age': 30}
b = dict(name='jamong', age=30)
c = dict(zip(['name', 'age'], ['jamong', 30]))
d = dict([('name', 'jamong'), ('age', 30)])
e = dict({'age': 30}, name='jamong')
print(a == b == c == d == e) # True
dict ํจ์๋ฅผ ์ด์ฉํด์ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก dictionary๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Dictionary ๋ฐ์ดํฐ ์ ์ด
d = {'name': 'tom'}
# dictionary ๋ฐ์ดํฐ ์ถ๊ฐ
d['age'] = 30 # {'name': 'tom', 'age': 30}
print(d)
# dictionary ๋ฐ์ดํฐ ์ญ์
del d['name']
print(d) # {'age': 30}
dictionary์ key๊ฐ์ ์ด์ฉํด์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
del ํค์๋๋ฅผ ์ฌ์ฉํด์ dictionary ๊ฐ์ ์ญ์ ํ ์ ์์ต๋๋ค.
Dictionary ํจ์๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ด
d = {
'name': 'tom',
'age': 30
}
# dictionary์ key์ ์กด์ฌ์ฌ๋ถ ํ์ธ
print('name' in d) # True
print('name' not in d) # False
# dictionary (key, value) ํ์์ผ๋ก ๋ฐ์ดํฐ ์ถ์ถ
print(d.items()) # dict_items([('name', 'tom'), ('age', 30)])
# dictionary key ๊ฐ๋ค์ ์ถ์ถํ๋ค.
print(d.keys()) # dict_keys(['name', 'age'])
# dictionary value ๊ฐ๋์ ์ถ์ถํ๋ค.
print(d.values()) # dict_values(['tom', 30])
# dictionary์ value๋ฅผ key๊ฐ์ผ๋ก๋ถํฐ ์ป์ ์ ์๋ค.
# key๊ฐ ์๋ ๊ฒฝ์ฐ default๋ก None์ ๋ฐํํ๊ณ 2๋ฒ์งธ ์ธ์๋ฅผ ์ง์ ํด์ฃผ๋ฉด ํด๋น ๊ฐ์ ๋ฐํํ๋ค.
print(d.get('name')) # tome
print(d.get('height')) # None
print(d.get('height', 123)) # 123
# dictionary์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค.
# ์ด๋ฏธ ์กด์ฌํ๋ key์ด๋ฉด overwriteํ๊ณ ์์ผ๋ฉด ์ถ๊ฐํ๋ค.
d.update({'age': 20})
print(d) # {'name': 'tom', 'age': 20}
# key์ ํด๋นํ๋ ๊ฐ์ ๋ฐํํ๊ณ dictionary์์ ์ญ์ ํ๋ค.
# key๊ฐ ์์ผ๋ฉด ์ค๋ฅ๋ฅผ ๋ฐ์์ํจ๋ค.
# 2๋ฒ์งธ ์ธ๊ฐ์ ์ง์ ๋์ด ์์ผ๋ฉด ์ค๋ฅ๊ฐ ์๋ ํด๋น ๊ฐ์ ๋ฐํํ๋ค.
# popitem ํจ์๋ ๊ฐ์ ๊ธฐ๋ฅ์ด์ง๋ง ๊ฐ์ด ์๋ key:value ์์ดํ
์ ๋ฐํํ๋ค.
print(d.pop('age')) # 20
print(d) # {'name': 'tom'}
print(d.pop('age')) # KeyError: 'age'
print(d.pop('age', 123)) # 123
# dictionary ๋ฐ์ดํฐ ๋ชจ๋ ์ญ์
d.clear()
print(d) # {}
์์ ๋ฅผ ํตํด ํ์ธํ๋ค.
dictionary vs list
list๋ ์ซ์ํํ๋ก ์ธ๋ฑ์ค๊ฐ ๋ถ์ฌ๋๊ณ dictionary๋ key ํํ์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ์ค์ ํด์ค๋๋ค. dictionary์ ๊ฒฝ์ฐ ๋ฌธ์ํํ ๋ฟ๋ง ์๋๋ผ ์ซ์ํํ๋ก๋ key๋ฅผ ์ง์ ํด์ค ์ ์๋๋ฐ... ๊ทธ๋ผ key๊ฐ์ ์ซ์ํํ๋ก ์ฌ์ฉํ๋ค๋ฉด ์ด๋ค ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ผํ ๊น์?
์ฐ์ ์ฑ๋ฅ์ ์ผ๋ก ๋ดค์ ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์๋๋ dictionary๋ณด๋ค๋ list๊ฐ ํจ์ฌ ๋น ๋ฆ ๋๋ค. ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๊ฐ ์์ฐจ์ ์ธ ๋ฒํธ๋ก ์ธ๋ฑ์ฑ๋์ด์ ์ฌ์ฉํ ์ ์๋ค๋ฉด list๋ tuple์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.
์ ๋ฆฌ
- ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํ ๋ฐ์ดํฐ ์งํฉ
- List๋ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฅํ๊ณ mutableํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
- python์์๋ ์์ ์ธ๋ฑ์ค ์ฌ์ฉ ๊ฐ๋ฅ
- slicing ๊ธฐ๋ฅ์ ์ด์ฉํด์ ํธ๋ฆฌํ๊ฒ ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋ค
- ๋ณ์์ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด ์๋ list๋ฅผ ํ ๋นํด๋ ๋ค๋ฅธ ์ฃผ์๋ฅผ ์ฐธ์กฐ
- Tuple์ immutableํ List
- Tuple์ ์ฑ๋ฅ์ด list๋ณด๋ค ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ํ์์๋ค๋ฉด Tuple์ ์ฌ์ฉํ ๊ฒ
- Tuple์ packing, unpacking์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํจ
- Set๋ ์์๊ฐ ์๊ณ ๋ฐ์ดํฐ ์ค๋ณต์ด ์๋ ๋ฐ์ดํฐ ์งํฉ
- Set๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ ์งํฉ ์ฐ์ฐ ๊ฐ๋ฅ
- Dictionary๋ ๋ฌธ์๋ ์ซ์ํ ๋ฐ์ดํฐ ํ์ ์ index๋ก ํ๋ key, value ์์ผ๋ก ๊ตฌ์ฑ๋ ์งํฉ
- ๋ฐ์ดํฐ ์ ๊ทผ ์๋๋ dictionary๋ณด๋ค list๊ฐ ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ์์ฐจ์ ์ธ ๋ฒํธ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด list๋ฅผ ์ฌ์ฉํ ๊ฒ
๋๊ธ