๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์
๐ก ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ : ํ์ด์ฌ์์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๋ ๋ฐฉ๋ฒ
# ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ
[ํํ์ for ํญ๋ชฉ in iterable if ์กฐ๊ฑด๋ฌธ]
- ํํ์ : ๊ฐ ํญ๋ชฉ์ ๋ํ ๊ณ์ฐ์ด๋ ๋ณํ
- ํญ๋ชฉ : ๋ฐ๋ณต๋๋ ๊ฐ
- iterable : ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด
์์ 1) 1๋ถํฐ 10๊น์ง์ ์ซ์๋ฅผ ์ ๊ณฑํ ๋ฆฌ์คํธ ์์ฑ
squares = [x**2 for x in range(1, 11)]
print(squares)
## ์ถ๋ ฅ: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
- `range(1,11)`: 1๋ถํฐ 10๊น์ง ์์ฐ์๋ฅผ
- `for x `: x ๋ก ๋ฐ์์
- `x**2`: ์ ๊ณฑ
์์ 2) ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ ์ค์ฒฉํ์ฌ 2์ฐจ์ ๋ฆฌ์คํธ ์์ฑ
matrix = [[i for i in range(1, 4)] for j in range(3)]
print(matrix)
## ์ถ๋ ฅ: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
- `range(1,4)`: 1๋ถํฐ 3๊น์ง ์์ฐ์๋ฅผ
- `i for i`: i๋ก ๋ฐ์์ i๋ก ์ถ๋ ฅํ ๊ฒ์
- `range(3)`: 3๋ฒ ๋ฐ๋ณตํ๊ธฐ
์์ 3) if , else ์กฐ๊ฑด๋ฌธ
[์ถ๋ ฅ๊ฐ if ์กฐ๊ฑด else ์กฐ๊ฑด ๋ง์กฑ x์ ์ถ๋ ฅ๊ฐ for i in ๋ฐ๋ณตํ ๊ฐ]
→ if ์กฐ๊ฑด๋ฌธ์ ์ ํ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ง ํด๋น ํญ๋ชฉ์ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ถ๊ฐ
Lambda
๐ก Lambda : ์ต๋ช ํจ์๋ก, ์ด๋ฆ ์์ด ์ ์๋๋ ๊ฐ๋จํ ํจ์
์ฃผ๋ก ํ ์ค๋ก ํํ๋๋ฉฐ, ์ผ๋ฐ์ ์ธ ํจ์ ์ ์์๋ ๋ฌ๋ฆฌ def ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ lambda ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์
lambda ๋งค๊ฐ๋ณ์ : ๊ณ์ฐ์
์์ 1) ์ ๊ณฑ ํจ์
square = lambda x: x ** 2
print(square(4))
## ์ถ๋ ฅ: 16
→ ๋งค๊ฐ๋ณ์ x์ ๋ํ์ฌ ์ ๊ณฑํ๊ธฐ(`x**2`)
์์ 2) lambda & filter
๐ก filter
filter(์กฐ๊ฑด ํจ์, ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ)
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)
## ์ถ๋ ฅ: [2, 4, 6, 8, 10]
- ์กฐ๊ฑดํจ์ ์๋ฆฌ์ `lambda x: x%2 == 0`์ด ๋ค์ด๊ฐ (์กฐ๊ฑด : x๊ฐ ์ง์์ผ ๋)
- ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ = numbers
→ numbers์์ x๊ฐ ์ง์์ธ ๊ฒฝ์ฐ๋ฅผ even_numbers๋ผ๋ ๋ฆฌ์คํธ๋ก ๋ฐํํ๊ธฐ
์์ 3) lambda & map
๐ก map
map(ํจ์, ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ)
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)
## ์ถ๋ ฅ: [1, 4, 9, 16, 25]
- ํจ์ ์๋ฆฌ์ `lambda x: x**2`๊ฐ ๋ค์ด๊ฐ (x๋ฅผ ์ ๊ณฑํด์ฃผ๋ ํจ์)
- ๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฐ์ดํฐ = numbers
→ numbers์ ์๋ ๋ชจ๋ ๊ฐ๋ค์ ๋ํด ์ ๊ณฑํด ์ด๋ฅผ squared_numbers๋ผ๋ ๋ฆฌ์คํธ๋ก ๋ฐํํ๊ธฐ