๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ Python/python-programming

[python] lambda ๋žŒ๋‹ค ํ•จ์ˆ˜ & filter & map & List Comprehension example codeโœŠ๐Ÿป

Hello๐Ÿ‘‹ I'm Dona!:)

์ง€๋‚œ list sorting(2) ํฌ์ŠคํŒ…์—์„œ ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ๋Œ“๊ธ€๋กœ ์งˆ๋ฌธ์ด ์žˆ์–ด์„œ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค!

์ €๋„ ์ฒ˜์Œ ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ๋ดค์„ ๋•Œ๋Š”, ์–ด๋ ค์›Œ ๋ณด์—ฌ์„œ ๋‘๋ ค์› ๋Š”๋ฐ ๋ง‰์ƒ ์‚ฌ์šฉํ•ด ๋ณด๋‹ˆ ๋ณ„๊ฑฐ์•„๋‹™๋‹ˆ๋‹ค!

์—„์ฒญ ํŽธ๋ฆฌํ•œ ๋…€์„์ด๋‹ˆ ๊ผญ ๋‚ด ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค์–ด ๊ฐ‘์‹œ๋‹ค! โœŠ๐Ÿป๐Ÿ”ฅ

 - ์ง€๋‚œ ํฌ์ŠคํŒ… : https://imdona.tistory.com/14

 

[python] List(2) list sorting : ๋‹ค์ค‘ ์กฐ๊ฑด ์ •๋ ฌ & ๋ฐฑ์ค€ 1181๋ฒˆ[๋‹จ์–ด ์ •๋ ฌ]

Hello๐Ÿ‘‹ I'm Dona!:) ์ง€๋‚œ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ๋‹ค์ค‘ ์กฐ๊ฑด ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. sort์™€ sorted์˜ documentation ์†Œ๊ฐœ๋Š” ์ง€๋‚œ ํฌ์ŠคํŒ… ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”! โฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡

imdona.tistory.com


๐Ÿฅ• ๋žŒ๋‹ค(lambda) ํ•จ์ˆ˜๋ž€?

์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜์™€ ๋žŒ๋‹ค ํ•จ์ˆ˜

๋žŒ๋‹ค ํ•จ์ˆ˜๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด, ํ•จ์ˆ˜ ์ด๋ฆ„ ์—†์ด ํ•œ ์ค„๋กœ ํ‘œํ˜„ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜ ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค! ๐Ÿ‘

๊ธฐ์กด ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜์™€ ๋‹ค๋ฅด๊ฒŒ ํ•จ์ˆ˜์— ์ด๋ฆ„์„ ์ง€์–ด์ฃผ์ง€ ์•Š๊ณ  1ํšŒ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•ด์š”! ๊ทธ๋ž˜์„œ "์ต๋ช… ํ•จ์ˆ˜"๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

๐Ÿ”Ž Why do we use this?

1. ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐํ•จ
2. ๋ฉ”๋ชจ๋ฆฌ์˜ ์ ˆ์•ฝ

1๋ฒˆ์€ ์‹œ๊ฐ์ ์œผ๋กœ ํ•œ๋ˆˆ์— ๋”ฑ! ๋Š๊ปด์ง€์‹œ๋‚˜์š”? โ˜บ๏ธ

2๋ฒˆ์€ ์กฐ๊ธˆ ๋” ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…์„ ๋“œ๋ฆฌ๋ฉด, ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ฉด, ํ•จ์ˆ˜๋ผ๋Š” ๊ฐ์ฒด[๊ฐ์ฃผ:1]๊ฐ€ ์ƒ๊ฒจ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๊ณ  ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ž์‹ ์ด ํ˜ธ์ถœ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ์— 1ํšŒ์šฉ์œผ๋กœ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜๋ผ๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ญ๋น„๋˜๊ฒ ์ฃ ?!

๋ฌผ๋ก  ํŒŒ์ด์ฌ์—์„œ ๋ณ€์ˆ˜์™€ ์ฐธ์กฐ๋ฅผ ๋Š์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์žˆ์ง€๋งŒ, ๊ทธ๋Ÿฐ ํ–‰์œ„๋ฅผ ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋˜ ๋‹ค๋ฅธ ๋‚ญ๋น„๊ฐ€ ๋˜๊ฒ ์ฃ  ( •ฬ ฬฏ•ฬ€ )


๐Ÿ’ป Code Example

1. List Comprehension Exampleโœจ + map & filter

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ๋ฐฐ์› ๋˜ List Comprehension๊ณผ ๊ฐ™์ด ์ ์šฉํ•ด ๋ด…์‹œ๋‹ค!

nums๋ผ๋Š” list์—์„œ

1) ๊ฐ ์›์†Œ๋“ค์„ ๋ชจ๋‘ ์ œ๊ณฑํ•ด์„œ result๋ผ๋Š” list๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ์ƒํ™ฉ

2)๊ฐ ์›์†Œ๋“ค์„ ๋ชจ๋‘ ์ œ๊ณฑํ•˜๋˜, ๊ทธ์ค‘ ์ง์ˆ˜๋งŒ ๊ณจ๋ผ์„œ esult๋ผ๋Š” list๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

๊ฐ์ด ์ข€ ์žกํžˆ์‹œ๋‚˜์š”?! 

nums = [1, 2, 3, 4]

'''1)List Comprehension'''
result = [x*x for x in nums]
# result == [1, 4, 9, 16]

result = [x*x for x in nums if x%2==0] #ํ•„ํ„ฐ์— ์กฐ๊ฑด๋ถ€๋ฅผ ์ถ”๊ฐ€
# result == [4, 16]

'''2)Map + Filter'''
result = list(map(lambda x: x*x, nums)) 
# result == [1, 4, 9, 16]

result = list(map(lambda x: x*x, filter(lambda x: x%2==0, nums))) 
# result == [4, 16]

 

2. map(function,  iterable)

documentation

map ํ•จ์ˆ˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์ •๋ง ์—†์œผ๋ฉด ์•ˆ ๋˜๋Š” ๋…€์„์ธ๋ฐ์š”! (ํšจ์ž..)

iterableํ•œ ๊ฐ์ฒด ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์›์†Œ๋“ค์— ํ•จ์ˆ˜๋ฅผ ์ ์šฉ์‹œ์ผœ ์ƒˆ๋กœ์šด iterableํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ! ์‚ฌ์šฉํ•ด ์ฃผ์„ธ์š”๐Ÿฅ•

'''์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ ํ”ํžˆ ๋งŒ๋‚˜๋Š” input ๋™์‹œ์— ๋ฐ›๋Š” ์ƒํ™ฉ'''
# map์„ ์“ฐ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„๋‹จ
a, b = map(int, input().split())

# map ์—†์ด ํ•˜๋ฉด?
a, b = input().split()
a = int(a)
b = int(b)

# ์˜ˆ๋ฅผ ๋“ค์–ด '1 2'๊ฐ€ input์ผ ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ๊ฐ ์˜ˆ์˜๊ฒŒ intํ˜•์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
a = 1
b = 2

 

โž• [์ฐธ๊ณ ] map์— ๋Œ€ํ•œ ๊ฐœ๋… ์ถ”๊ฐ€

1) map์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์‹ถ์„ ๋•Œ๋Š” list๋กœ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ณ€ํ˜•ํ•˜์—ฌ printํ•ด์•ผํ•จ! ๊ทธ๋ƒฅ printํ•˜๋ฉด, ๊ฐ์ฒด๊ฐ€ ์ถœ๋ ฅ

2) for๋ฌธ์„ ๋Œ๋•Œ๋Š” list๋กœ ๋ณ€ํ˜•ํ•˜์ง€์•Š์•„๋„ ๊ดœ์ฐฎ๋‹ค -> ๊ทธ ์ด์œ ๋Š” range์ฒ˜๋Ÿผ map object์—์„œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ๋ณด์—ฌ์ฃผ๊ธฐ๋•Œ๋ฌธ์—!

 

'''์•„๋ž˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ list๋กœ ๋ฐ›์„ ๋•Œ
1. map์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์‹ถ์„ ๋•Œ๋Š” list๋กœ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ณ€ํ˜•ํ•˜์—ฌ printํ•ด์•ผํ•จ!
   ๊ทธ๋ƒฅ printํ•˜๋ฉด ๊ฐ’์„ ๋ณผ ์ˆ˜ ์—†์Œ(๊ฐ์ฒด๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค)
2. for๋ฌธ์„ ๋Œ๋•Œ๋Š” list๋กœ ๋ณ€ํ˜•ํ•˜์ง€์•Š์•„๋„ ๊ดœ์ฐฎ๋‹ค -> ๊ทธ ์ด์œ ๋Š” range์ฒ˜๋Ÿผ map object์—์„œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—!
'''
numbers = map(int, list(input().split()))

# 1) numbers๋ผ๋Š” list๋ฅผ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ
print(numbers) # out : <map object at 0x1044b2260>
print(list(numbers)) # out : [1, 3, 5, 7]

# 2) for๋ฌธ์„ ๋Œ๋ฉฐ ์›์†Œ๋ฅผ ํ™•์ธํ•  ๋•Œ
for num in numbers:
    condition = True
    if num <= 1:continue
    for i in range(2, num):
        if num % i == 0:
            condition = False
            break

 

โž• [์ฐธ๊ณ ] iterable ๊ฐ์ฒด?

์•„๋ž˜์˜ documentation์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด์ž.

  • ๋ฉค๋ฒ„๋ฅผ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
  • ์˜ˆ : ๋ชจ๋“  ์‹œํ€€์Šค์œ ํ˜•(๋ฆฌ์ŠคํŠธ, ์ŠคํŠธ๋ง, ํŠœํ”Œ ๋“ฑ)๊ณผ dict, ํŒŒ์ผ์˜ค๋ธŒ์ ํŠธ, ์˜ค๋ธŒ์ ํŠธ ๋“ฑ ์ผ๋ถ€ ๋น„์‹œํ€€์Šค์œ ํ˜•

iterable documentation

 

3. filter(functioniterable)

์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ์—์–ด์ปจ ํ•„ํ„ฐ, ์ •์ˆ˜๊ธฐ ํ•„ํ„ฐ์ฒ˜๋Ÿผ ์›ํ•˜๋Š” ๊ฒƒ์„ ๊ฑธ๋Ÿฌ์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

iterable ๊ฐ์ฒด ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์›์†Œ๋“ค์— ํ•จ์ˆ˜๋ฅผ ์ ์šฉ์‹œ์ผœ์„œ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ธ ๊ฐ’๋“ค๋กœ ์ƒˆ๋กœ์šด iterable ๊ฐ์ฒด ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ! ์‚ฌ์šฉํ•ด ์ฃผ์„ธ์š”๐Ÿฅ•

1. ํŠน์ • ์กฐ๊ฑด์œผ๋กœ ๊ฑธ๋Ÿฌ์„œ ๊ฑธ๋Ÿฌ์ง„ ์š”์†Œ๋“ค๋กœ iterator ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฆฌํ„ด -> list๋ฅผ ๋ณด๊ณ  ์‹ถ์œผ๋ฉด ๊ผญ list ํƒ€์ž…์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”! โœจ

2. map ํ•จ์ˆ˜์™€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋™์ผํ•˜๋‚˜, ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ธ์ง€ ๊ฑฐ์ง“์ธ์ง€์— ๋”ฐ๋ผ, ํ•ด๋‹น ์š”์†Œ๋ฅผ ํฌํ•จํ• ์ง€๋ฅผ ๊ฒฐ์ •

3. ํ•จ์ˆ˜๋ฅผ 1ํšŒ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋Š”, ๊ฐ„๊ฒฐํ•˜๊ฒŒ lambda ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค๐Ÿ‘

'''filterํ•จ์ˆ˜ ๊ธฐ๋ณธ ์ƒ๊น€์ƒˆ'''
filter(ํ•จ์ˆ˜, ๋ฆฌ์ŠคํŠธ)

'''example'''
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def even(n):
    return True if n % 2 == 0 else False

result = filter(even, nums)

print(result)
# <filter object at 0x103bfe0b0>

print(list(result))
# [2, 4, 6, 8, 10]

'''lambda & filter'''
result = filter(lambda x : x%2==0, nums)

์–ด๋ ค์šด ์ฒ™ํ•˜์ง€๋งŒ ์•Œ๊ณ  ๋ณด๋ฉด ์‰ฌ์šด ๋…€์„๋“ค์„ ์ฝ”๋“œ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. 

์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค โ˜บ๏ธ

ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š” :) GO FOR IT!! BYE!! ๐Ÿ‘‹


๐Ÿ™ REFERENCE

  1. ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์—์„œ ์ž์„ธํ•˜๊ฒŒ ๋‹ค๋ฃฐ๊ฒŒ์š”, ์šฐ์„ ์€ ํŒŒ์ด์ฌ์€ ๋ชจ๋‘ ๊ฒƒ์ด ๊ฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์ˆ˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๋ผ๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ‘์‹œ๋‹ค! (๋จผ์ € ๊ถ๊ธˆํ•˜๋ฉด ๊ตฌ๊ธ€๋ง!๐Ÿ”Ž) [๋ณธ๋ฌธ์œผ๋กœ]