ฟังก์ชัน map(), filter(), reduce() คืออะไร?

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

Kirill Smirnov

Data Science Consultant, Altran

map()

map(                                                )
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

map()

map(                       Iterable1, Iterable2, ...)

Iterables: [1, 2, 3, 4, 5], [10, 20, 30, 40, 50], ...

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

map()

map(function(x1, x2, ...), Iterable1, Iterable2, ...)

Iterables: [1, 2, 3, 4, 5], [10, 20, 30, 40, 50], ...

1, 10, ... $\rightarrow$ function(1, 10, ...) $\rightarrow$ new object

2, 20, ... $\rightarrow$ function(2, 20, ...) $\rightarrow$ new object

3, 30, ... $\rightarrow$ function(3, 30, ...) $\rightarrow$ new object

4, 40, ... $\rightarrow$ function(4, 40, ...) $\rightarrow$ new object

5, 50, ... $\rightarrow$ function(5, 50, ...) $\rightarrow$ new object

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

map() กับ Iterable เดียว

nums = [1, 2, 3, 4, 5]

โจทย์คือต้องการได้ [1, 4, 9, 16, 25]

def squared(x):
    return x**2
squares = map(squared, nums)
print(squares)
<map object at 0x7fdbe4ab3da0>

squares เป็น iterable

for square in squares:
    print(square)
1
4
9
16
25
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

map() กับ Iterable เดียว

nums = [1, 2, 3, 4, 5]

โจทย์คือต้องการได้ [1, 4, 9, 16, 25]

def squared(x):
    return x**2
squares = map(squared, nums)
print(squares)
<map object at 0x7fdbe4ab3da0>

squares เป็น Iterable

list(squares)
[1, 4, 9, 16, 25]
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

map() กับ Iterable เดียว

nums = [1, 2, 3, 4, 5]

โจทย์คือต้องการได้ [1, 4, 9, 16, 25]

def squared(x):
    return x**2
squares = map(squared, nums)
print(squares)
<map object at 0x7fdbe4ab3da0>

squares เป็น Iterator

next(squares)
1
next(squares)
4
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

map() กับ lambda expressions

nums = [1, 2, 3, 4, 5]

โจทย์คือต้องการได้ [1, 4, 9, 16, 25]

def squared(x):
    return x**2
squares = map(squared, nums)
list(squares)
[1, 4, 9, 16, 25]
nums = [1, 2, 3, 4, 5]

โจทย์คือต้องการได้ [1, 4, 9, 16, 25]

squares = map(lambda x: x**2, nums)
list(squares)
[1, 4, 9, 16, 25]
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

map() กับหลาย Iterables

nums1 = [1, 2, 3, 4, 5]
nums2 = [10, 20, 30, 40, 50]

โจทย์คือต้องการได้: [1*10, 2*20, 3*30, 4*40, 5*50] = [10, 40, 90, 160, 250]

mult = map(lambda x, y: x*y, nums1, nums2)
list(mult)
[10, 40, 90, 160, 250]
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

filter()

filter(                     )
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

filter()

filter(             Iterable)

Iterable: [1, 2, 3, 4, 5]

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

filter()

filter(function(x), Iterable)

Iterable: [1, 2, 3, 4, 5]

1 $\rightarrow$ function(1) $\rightarrow$ True $\rightarrow$ เก็บ 1 ไว้

2 $\rightarrow$ function(2) $\rightarrow$ False $\rightarrow$ ตัด 2 ออก

3 $\rightarrow$ function(3) $\rightarrow$ True $\rightarrow$ เก็บ 3 ไว้

4 $\rightarrow$ function(4) $\rightarrow$ False $\rightarrow$ ตัด 4 ออก

5 $\rightarrow$ function(5) $\rightarrow$ True $\rightarrow$ เก็บ 5 ไว้

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

ตัวอย่าง filter()

nums = [-3, -2, -1, 0, 1, 2, 3]

โจทย์คือต้องการได้: [1, 2, 3]

def positive(x):
    return x > 0
fobj = filter(positive, nums)
print(fobj)
<filter object at 0x7f196d378d68>

fobj เป็น Iterable

for item in fobj:
    print(item)
1
2
3
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

ตัวอย่าง filter()

nums = [-3, -2, -1, 0, 1, 2, 3]

โจทย์คือต้องการได้: [1, 2, 3]

def positive(x):
    return x > 0
fobj = filter(positive, nums)
print(fobj)
<filter object at 0x7f196d378d68>

fobj เป็น Iterable

list(fobj)
[1, 2, 3]
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

ตัวอย่าง filter()

nums = [-3, -2, -1, 0, 1, 2, 3]

โจทย์คือต้องการได้: [1, 2, 3]

def positive(x):
    return x > 0
fobj = filter(positive, nums)
print(fobj)
<filter object at 0x7f196d378d68>

fobj เป็น Iterator

next(fobj)
1
next(fobj)
4
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

filter() กับ lambda expressions

nums = [-3, -2, -1, 0, 1, 2, 3]

โจทย์คือต้องการได้: [1, 2, 3]

def positive(x):
    return x > 0
fobj = filter(positive, nums)
list(fobj)
[1, 2, 3]
nums = [-3, -2, -1, 0, 1, 2, 3]

โจทย์คือต้องการได้: [1, 2, 3]

fobj = filter(lambda x: x > 0, nums)
list(fobj)
[1, 2, 3]
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable: [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ ออบเจกต์ใหม่ที่มีชนิดเดียวกับข้อมูลใน Iterable

การแสดงลิสต์ที่กำหนดให้

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable: [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ ออบเจกต์ใหม่ที่มีชนิดเดียวกับข้อมูลใน Iterable

การรวมสองสมาชิกแรกของลิสต์เข้าด้วยกัน

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable: [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ ออบเจกต์ใหม่ที่มีชนิดเดียวกับข้อมูลใน Iterable

การรวมผลลัพธ์กับสมาชิกลำดับที่สามของลิสต์

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable: [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ ออบเจกต์ใหม่ที่มีชนิดเดียวกับข้อมูลใน Iterable

การรวมผลลัพธ์กับสมาชิกลำดับที่สี่ของลิสต์

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

reduce()

from functools import reduce

reduce(function(x, y), Iterable)

Iterable: [1, 2, 3, 4, 5]

[1, 2, 3, 4, 5] $\rightarrow$ ออบเจกต์ใหม่ที่มีชนิดเดียวกับข้อมูลใน Iterable

การรวมผลลัพธ์กับสมาชิกลำดับที่ห้าของลิสต์

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

ตัวอย่าง reduce()

nums = [8, 4, 5, 1, 9]

โจทย์คือต้องการได้: 1 - ค่าต่ำสุด

def smallest(x, y):
    if x < y:
        return x
    else:
        return y
reduce(smallest, nums)
1

smallest(8, 4) $\rightarrow$ 4

smallest(4, 5) $\rightarrow$ 4

smallest(4, 1) $\rightarrow$ 1

smallest(1, 9) $\rightarrow$ 1 - ผลลัพธ์สุดท้าย

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

reduce() กับ lambda expressions

nums = [8, 1, 4, 2, 9]

โจทย์คือต้องการได้: 1 - ค่าต่ำสุด

def smallest(x, y):
    if x < y:
        return x
    else:
        return y
reduce(smallest, nums)
1
nums = [8, 1, 4, 2, 9]

โจทย์คือต้องการได้: 1 - ค่าต่ำสุด

reduce(lambda x, y: x if x < y else y, nums)
1
ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

มาฝึกกันเถอะ!

ฝึกทำโจทย์สัมภาษณ์งานเขียนโค้ดด้วย Python

Preparing Video For Download...