Python ฟังก์ชัน map() พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

Python `map()` จะนำฟังก์ชันที่กำหนดไปใช้กับทุกรายการในออบเจ็กต์ที่สามารถวนซ้ำได้ เช่น ลิสต์ ทูเปิล เซต พจนานุกรม หรือสตริง โดยจะคืนค่าเป็นออบเจ็กต์ `map` แบบ lazy ซึ่งสามารถแปลงได้ด้วย `list()` หรือวนซ้ำโดยใช้ลูป

  • 🔢 ไวยากรณ์: ฟังก์ชัน `map()` รับฟังก์ชันและออบเจ็กต์ที่สามารถวนซ้ำได้ตั้งแต่หนึ่งตัวขึ้นไป แล้วนำฟังก์ชันนั้นไปใช้กับแต่ละองค์ประกอบ
  • 🔁 ผลตอบแทน: map() จะส่งคืนอ็อบเจ็กต์ map แบบ lazy ดังนั้นจึงต้องห่อหุ้มด้วย list(), tuple() หรือ set() เพื่อดูผลลัพธ์
  • 🧩 Iterables: ลิสต์, ทูเพิล, เซต, พจนานุกรม และสตริง สามารถใช้เป็นอินพุตให้กับฟังก์ชัน map() ได้
  • แลมบ์ดา: การใช้ map() ร่วมกับ lambda ช่วยหลีกเลี่ยงการกำหนดฟังก์ชันที่มีชื่อแยกต่างหากสำหรับการแปลงข้อมูลแบบง่ายๆ
  • iterable หลายตัว: การส่ง iterable หลายตัวจะทำให้ฟังก์ชันถูกนำไปใช้กับ iterable เหล่านั้นพร้อมกัน หยุดping อย่างน้อยที่สุด
  • 🤖 ความช่วยเหลือจากเอไอ: ผู้ช่วย AI เช่น GitHub Copilot สร้างการเรียกใช้ map() และการแปลงแบบ map จะป้อนข้อมูลเข้าสู่ไปป์ไลน์ในกระบวนการเรียนรู้ของเครื่อง

Python แผนที่() ฟังก์ชั่น

วากยสัมพันธ์

map(function, iterator1,iterator2 ...iteratorN)

พารามิเตอร์

นี่คือพารามิเตอร์สำคัญสองประการ:

  • ฟังก์ชั่น: ฟังก์ชันบังคับที่ต้องระบุให้กับ map() ซึ่งจะถูกนำไปใช้กับทุกรายการที่มีอยู่ใน iterator
  • ตัววนซ้ำ: อ็อบเจ็กต์ที่สามารถวนซ้ำได้ซึ่งจำเป็นต้องมี อาจเป็นลิสต์ ทูเพิล หรืออื่นๆ คุณสามารถส่งอ็อบเจ็กต์ตัววนซ้ำหลายตัวไปยังฟังก์ชัน map() ได้

ราคาย้อนกลับ

ฟังก์ชัน `map()` จะนำฟังก์ชันที่กำหนดไปใช้กับทุกรายการที่อยู่ภายในตัววนซ้ำ และส่งคืนออบเจ็กต์แผนที่ที่สามารถวนซ้ำได้ เช่น ทูเปิล รายการ เป็นต้น

ฟังก์ชั่น map() ทำงานอย่างไร?

ฟังก์ชัน `map()` รับอินพุตสองอย่าง ได้แก่ ฟังก์ชันและออบเจ็กต์ที่สามารถวนซ้ำได้ ฟังก์ชันที่ส่งให้กับ `map()` เป็นฟังก์ชันปกติ และจะวนซ้ำค่าทั้งหมดที่มีอยู่ในออบเจ็กต์ที่สามารถวนซ้ำได้นั้น

ตัวอย่างเช่น พิจารณาว่าคุณมีรายการตัวเลข และคุณต้องการหากำลังสองของตัวเลขแต่ละตัว

เพื่อให้ได้ผลลัพธ์ เราจำเป็นต้องมีฟังก์ชันที่จะส่งคืนค่ากำลังสองของตัวเลขที่กำหนด ฟังก์ชันมีดังนี้:

def square(n):
	return n*n

รายการสิ่งของที่เราต้องการหาค่ากำลังสองมีดังต่อไปนี้:

my_list = [2,3,4,5,6,7,8,9]

ต่อไปเราจะใช้ฟังก์ชัน map() ที่มีอยู่แล้วในตัวเพื่อหาค่ากำลังสองของแต่ละรายการใน my_list

รหัสสุดท้ายมีดังนี้:

def square(n):
    return n*n
my_list = [2,3,4,5,6,7,8,9]
updated_list = map(square, my_list)
print(updated_list)
print(list(updated_list))

Output:

<map object at 0x0000002C59601748>
[4, 9, 16, 25, 36, 49, 64, 81]

ผลลัพธ์ของฟังก์ชัน map() ดังที่เห็นด้านบน คืออ็อบเจ็กต์แผนที่ที่แสดงบนหน้าจอ .

คุณจะต้องวนซ้ำผลลัพธ์จาก map() โดยใช้ลูป for หรือเมธอด list() เพื่อให้ได้ผลลัพธ์สุดท้าย ในโค้ดนี้ฉันใช้ list() เพื่อแสดงค่าภายในลิสต์ที่กำหนด

ดังนั้น การใช้ฟังก์ชัน map() ทำให้เราสามารถหาค่ากำลังสองของแต่ละจำนวนได้ รายการที่ส่งให้กับฟังก์ชัน map() คือ [2,3,4,5,6,7,8,9] และเมื่อใช้ฟังก์ชัน square() ผลลัพธ์ที่ได้คือ [4, 9, 16, 25, 36, 49, 64, 81]

ฟังก์ชัน map() จะนำฟังก์ชัน square() มาใช้กับทุกรายการในลิสต์ ตัวอย่างเช่น ฟังก์ชันนี้จะรับตัวแปร my_list และอัปเดตลิสต์ด้วยกำลังสองของแต่ละตัวเลข ผลลัพธ์จะถูกเก็บไว้ในตัวแปร updated_list

การใช้ map() กับ Python ฟังก์ชั่นในตัว

การขอ Python ฟังก์ชัน map() เป็นฟังก์ชันในตัวและยังสามารถใช้ร่วมกับฟังก์ชันในตัวอื่นๆ ได้ด้วย Pythonในตัวอย่างนี้ เราจะใช้ประโยชน์จาก Python round() เป็นฟังก์ชันในตัวที่ใช้ปัดเศษค่าที่กำหนดให้

ตัวอย่าง:

รายการที่ฉันมีคือ my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907] ฉันต้องการค่าที่ปัดเศษแล้วสำหรับแต่ละรายการในรายการ ดังนั้นเราจะใช้ฟังก์ชัน round() แทนฟังก์ชัน map()

my_list = [2.6743,3.63526,4.2325,5.9687967,6.3265,7.6988,8.232,9.6907]
updated_list = map(round, my_list)
print(updated_list)
print(list(updated_list))

Output:

<map object at 0x000000E65F901748>
[3, 4, 4, 6, 6, 8, 8, 10]

ฟังก์ชัน round() จะถูกนำไปใช้กับทุกรายการในลิสต์ และจะส่งคืนลิสต์ที่มีค่าทั้งหมดถูกปัดเศษ ดังที่แสดงในผลลัพธ์

การใช้ map() กับสตริงเป็นตัววนซ้ำ

เรายังสามารถใช้ map() กับสตริงได้อีกด้วย ใน Pythonสตริงมีลักษณะการทำงานคล้ายกับอาร์เรย์ ดังนั้นเราจึงสามารถใช้มันภายในฟังก์ชัน map() ได้อย่างง่ายดาย

ในตัวอย่างนี้ เรามีฟังก์ชัน myMapFunc() ที่ทำหน้าที่แปลงสตริงที่กำหนดให้เป็นตัวพิมพ์ใหญ่ ฟังก์ชัน myMapFunc() ถูกส่งไปยังฟังก์ชัน map() ฟังก์ชัน map() จะทำหน้าที่แปลงสตริงที่กำหนดให้เป็นตัวพิมพ์ใหญ่โดยการส่งสตริงนั้นไปยัง myMapFunc()

def myMapFunc(s):
    return s.upper()
my_str = "welcome to guru99 tutorials!"
updated_list = map(myMapFunc, my_str)
print(updated_list)
for i in updated_list:
    print(i, end="")

Output:

<map object at 0x000000DF2E711748>
WELCOME TO GURU99 TUTORIALS!

การใช้ map() กับ List ของ Numbers

ในการทำงานกับลิสต์ในฟังก์ชัน map() เราจะนำลิสต์ของตัวเลขมาคูณแต่ละตัวในลิสต์ด้วย 10

รายการที่เราจะใช้คือ [2,3,4,5,6,7,8,9] ฟังก์ชัน myMapFunc() จะทำการคูณตัวเลขที่กำหนดด้วย 10 โดยฟังก์ชันนี้จะถูกส่งไปยัง map() พร้อมกับรายการ

ตัวอย่าง:

def myMapFunc(n):
    return n*10

my_list = [2,3,4,5,6,7,8,9]

updated_list = map(myMapFunc, my_list)
print(updated_list)
print(list(updated_list))

Output:

<map object at 0x000000EE2C061898>
[20, 30, 40, 50, 60, 70, 80, 90]

ผลลัพธ์ที่เราเห็นคือ ตัวเลขแต่ละตัวในรายการจะถูกคูณด้วย 10

การใช้ map() กับ Tuple

สิ่งอันดับเป็นวัตถุใน Python ซึ่งประกอบด้วยรายการที่คั่นด้วยเครื่องหมายจุลภาคและอยู่ในวงเล็บ ในตัวอย่างนี้ เราจะใช้ทูเปิลที่มีค่าเป็นสตริง ฟังก์ชันที่เราจะใช้จะแปลงค่าที่กำหนดให้เป็นตัวพิมพ์ใหญ่

ตัวอย่าง:

def myMapFunc(n):
    return n.upper()

my_tuple = ('php','java','python','c++','c')

updated_list = map(myMapFunc, my_tuple)
print(updated_list)
print(list(updated_list))

Output:

<map object at 0x0000009C3C3A16A0>
['PHP', 'JAVA', 'PYTHON', 'C++', 'C']

ผลลัพธ์ที่เราได้รับคือทูเปิลที่มีค่าทั้งหมดในนั้นถูกแปลงเป็นตัวพิมพ์ใหญ่

การใช้ map() กับพจนานุกรม

A พจนานุกรมใน Python สร้างขึ้นโดยใช้วงเล็บปีกกา ({}) เนื่องจากพจนานุกรมเป็นตัววนซ้ำ คุณจึงสามารถใช้มันภายในฟังก์ชัน map() ได้ ตอนนี้เรามาลองใช้พจนานุกรมเป็นตัววนซ้ำภายในฟังก์ชัน map() กัน

ตัวอย่างต่อไปนี้แสดงวิธีการทำงานของตัววนซ้ำพจนานุกรมภายในฟังก์ชัน map():

def myMapFunc(n):
    return n*10
my_dict = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_dict)
print(finalitems)
print(list(finalitems))

Output:

<map object at 0x0000007EB451DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

การใช้ map() กับ Set

ชุดใน Python คือชุดข้อมูลที่ไม่มีลำดับซึ่งอยู่ในวงเล็บปีกกา ({}) เนื่องจาก set() ก็เป็นตัววนซ้ำเช่นกัน คุณจึงสามารถใช้มันภายในฟังก์ชัน map() ได้

ต่อไปนี้เป็นตัวอย่างการใช้งานเซ็ตเป็นตัววนซ้ำภายในเมธอด map():

def myMapFunc(n):
    return n*10
my_set = {2,3,4,5,6,7,8,9}
finalitems = map(myMapFunc, my_set)
print(finalitems)
print(list(finalitems))

Output:

<map object at 0x000000AC8F05DEF0>
[20, 30, 40, 50, 60, 70, 80, 90]

การใช้ map() กับฟังก์ชัน Lambda

In Pythonนิพจน์แลมบ์ดาถูกนำมาใช้เพื่อสร้างฟังก์ชันที่ไม่ระบุชื่อ คุณจะต้องใช้คีย์เวิร์ด lambda เช่นเดียวกับที่คุณใช้ def เพื่อกำหนดฟังก์ชันปกติ

ในตัวอย่างนี้ เราจะใช้ฟังก์ชันแลมบ์ดาภายในเมธอด map() ฟังก์ชันแลมบ์ดาจะคูณค่าแต่ละค่าในลิสต์ด้วย 10

ตัวอย่าง:

my_list = [2,3,4,5,6,7,8,9]
updated_list = map(lambda x: x * 10, my_list)
print(updated_list)
print(list(updated_list))

Output:

<map object at 0x000000BD18B11898>
[20, 30, 40, 50, 60, 70, 80, 90]

การใช้ตัววนซ้ำหลายตัวภายในฟังก์ชัน map()

ตัวอย่างที่ 1: การส่งตัววนซ้ำรายการสองตัวไปยังฟังก์ชัน map()

คุณสามารถส่งตัววนซ้ำได้มากกว่าหนึ่งตัวพร้อมกัน เช่น รายการ ทูเปิล ฯลฯ ไปยังฟังก์ชัน map()

ตัวอย่างเช่น หากคุณต้องการบวกลิสต์สองรายการ คุณสามารถทำได้โดยใช้ฟังก์ชัน map() เราจะใช้ลิสต์สองรายการ คือ my_list1 และ my_list2

ในตัวอย่างด้านล่างนี้ รายการแรกใน my_list1 จะถูกบวกเข้ากับรายการแรกของ my_list2 ฟังก์ชัน myMapFunc() รับรายการจาก my_list1 และ my_list2 และส่งคืนผลรวมของทั้งสองรายการ

ต่อไปนี้เป็นตัวอย่างการทำงานของการบวกลิสต์สองรายการที่กำหนดให้โดยใช้ฟังก์ชัน map()

def myMapFunc(list1, list2):
    return list1+list2

my_list1 = [2,3,4,5,6,7,8,9]
my_list2 = [4,8,12,16,20,24,28]

updated_list = map(myMapFunc, my_list1,my_list2)
print(updated_list)
print(list(updated_list))

Output:

<map object at 0x0000004D5F751860>
[6, 11, 16, 21, 26, 31, 36]

ตัวอย่างที่ 2: การส่งทูเปิลหนึ่งตัวและตัววนซ้ำรายการไปยังฟังก์ชัน map()

เราจะใช้ลิสต์และทูเพิลอิเทอเรเตอร์ในฟังก์ชัน map() ฟังก์ชันที่ส่งให้กับ map() คือ myMapFunc() จะดึงรายการจากลิสต์และทูเพิล รายการเหล่านั้นจะถูกเชื่อมด้วยเครื่องหมายขีดล่าง (_) ตัวอย่างการทำงานแสดงอยู่ด้านล่าง:

def myMapFunc(list1, tuple1):
    return list1+"_"+tuple1

my_list = ['a','b', 'b', 'd', 'e']
my_tuple = ('PHP','Java','Python','C++','C')

updated_list = map(myMapFunc, my_list,my_tuple)
print(updated_list)
print(list(updated_list))

Output:

<map object at 0x00000059F37BB4E0>
['a_PHP', 'b_Java', 'b_Python', 'd_C++', 'e_C']

คำถามที่พบบ่อย

ทั้งสองวิธีใช้การดำเนินการกับแต่ละรายการ List comprehension มักจะอ่านง่ายกว่าและส่งคืนลิสต์โดยตรง ในขณะที่ map() ส่งคืนอ็อบเจ็กต์ map แบบ lazy และอาจเร็วกว่าเมื่อใช้ฟังก์ชันที่มีชื่ออยู่แล้วซ้ำ

ไม่เลย ฟังก์ชัน `map()` จะไม่เปลี่ยนแปลงออบเจ็กต์ iterable เดิม มันจะอ่านแต่ละองค์ประกอบ ใช้ฟังก์ชันของคุณ และสร้างออบเจ็กต์ map แบบ lazy ใหม่ โดยที่ลิสต์ ทูเปิล หรือสตริงต้นฉบับยังคงไม่เปลี่ยนแปลง

In Python 3. เมธอด `map()` เป็นแบบ lazy loading: มันจะคืนค่าเป็นอ็อบเจ็กต์ `map` ซึ่งจะคำนวณค่าเฉพาะเมื่อมีการวนซ้ำเท่านั้น วิธีนี้ช่วยประหยัดหน่วยความจำสำหรับข้อมูลขนาดใหญ่ ควรใช้ `list()` ครอบไว้ หรือใช้ลูปวนซ้ำเพื่อดึงผลลัพธ์

ฟังก์ชัน `map()` จะแปลงข้อมูลทุกรายการ ฟังก์ชัน `filter()` จะเก็บเฉพาะข้อมูลที่ตรงตามเงื่อนไข และฟังก์ชัน `reduce()` (จาก `functools`) จะรวมข้อมูลทั้งหมดเข้าเป็นค่าเดียว โดยรวมแล้ว ฟังก์ชันเหล่านี้ครอบคลุมการแปลง การเลือก และการรวมข้อมูล

เมื่อ iterable มีความยาวแตกต่างกัน ฟังก์ชัน map() จะหยุดที่ iterable ที่สั้นที่สุด รายการที่เกินมาใน iterable ที่ยาวกว่าจะถูกละเลย ดังนั้นจึงไม่เกิดข้อผิดพลาด และผลลัพธ์จะตรงกับ iterable ที่สั้นที่สุด

ไม่ครับ อ็อบเจ็กต์ map เป็นตัววนซ้ำที่ใช้จนหมดหลังจากวนรอบเพียงครั้งเดียว เมื่อคุณวนลูปผ่านมันหรือเรียกใช้เมธอด list() มันก็จะว่างเปล่า หากต้องการนำกลับมาใช้ใหม่ ให้แปลงมันเป็นลิสต์ก่อนครับ

ในแมชชีนเลิร์นนิง ฟังก์ชัน map() จะใช้ฟังก์ชันการประมวลผลล่วงหน้ากับชุดข้อมูลต่างๆ เช่น การปรับขนาดตัวเลข การแยกคำในข้อความ หรือการแปลงคุณลักษณะก่อนการฝึกฝน มันให้วิธีการที่เรียบง่ายและเป็นระบบในการดำเนินการเดียวกันกับตัวอย่างจำนวนมาก

ใช่แล้ว GitHub Copilot จะเติมข้อความอัตโนมัติสำหรับการเรียกใช้ map() ด้วยฟังก์ชันและ iterable ที่ถูกต้อง และเครื่องมือ AI ของเอเจนต์สามารถปรับโครงสร้างลูปให้เป็นนิพจน์ map() จากนั้นเรียกใช้การทดสอบของคุณเพื่อยืนยันว่าพฤติกรรมไม่เปลี่ยนแปลง

สรุปโพสต์นี้ด้วย: