Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Map Function: คู่มือขั้นตอนต่อขั้นตอน

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


เมื่อคุณทำงานกับลิสต์รายการใน Python คุณอาจต้องการดำเนินฟังก์ชันเฉพาะบนแต่ละรายการเหล่านั้น

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

ในบทช่วยสอนนี้ ใช้ชุดของตัวอย่าง เราอภิบายวิธีใช้ฟังก์ชัน map() ใน Python

Python Iterable Objects (ออบเจ็กต์ที่วนซ้ำได้)

Iterable objects คือรายการที่มีจำนวนค่าที่นับได้ และสามารถเดินทางผ่านได้ ลิสต์ Dictionary ทูเพิล และเซต เป็น iterable objects ทั้งหมดใน Python เนื่องจากพวกมันสามารถมีหลายค่าและสามารถเดินทางผ่านได้

สมมติว่าคุณมีลิสต์ชื่อนักเรียนที่คุณต้องการจัดเก็บ แทนที่จะจัดเก็บชื่อเหล่านี้ในตัวแปร Python หลายตัว คุณสามารถประกาศอาร์เรย์เพื่อจัดเก็บค่าเหล่านี้:

students = ["Lucy", "Bill", "Graham", "Tommy", "Leslie"]

ตัวแปร students ของเรามีลิสต์ ซึ่งเป็น iterable object นี่หมายความว่าเราสามารถเดินทางผ่านรายการในลิสต์ได้

Python Map Function Syntax (ไวยากรณ์ฟังก์ชัน Map)

ฟังก์ชัน map() ส่งผ่านแต่ละองค์ประกอบในลิสต์ และดำเนินการฟังก์ชันบนแต่ละองค์ประกอบ map() เป็น built-in ของ Python นี่หมายความว่าคุณไม่ต้องนำเข้าไลบรารีใดๆ เพื่อใช้เมธอด map()

Python map() เป็น higher-order function ที่สามารถใช้เพื่อนำฟังก์ชันเฉพาะไปใช้กับหลายองค์ประกอบใน iterable object ไวยากรณ์สำหรับฟังก์ชัน Python map() มีดังนี้:

map(function, iterable)

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

วิธีใช้ Map Function ใน Python

สมมติว่าคุณเป็นผู้บริหารที่โรงเรียนที่ได้รับมอบหมายให้สร้างรายชื่อนักเรียนสมบูรณ์

เราตัดสินใจพิมพ์ลิสต์ชื่อนักเรียนพร้อมกับระดับชั้นของแต่ละนักเรียนข้างๆ ชื่อของพวกเขา นี่จะป้องกันความสับสนหากนักเรียนสองคนในระดับชั้นที่ต่างกันมีชื่อเดียวกัน

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

def mergeNamesAndGrades(name):
    return name + " First Grade"
students = ["Lucy", "Bill", "Graham", "Tommy", "Leslie"]
student_roster = map(mergeNamesAndGrades, students)

ในสองบรรทัดแรก เราประกาศฟังก์ชัน Python ชื่อ mergeNamesAndGrades ฟังก์ชันนี้รวมชื่อนักเรียนแต่ละคนกับ First Grade

จากนั้นในบรรทัดถัดไป เรากำหนดลิสต์นักเรียนในโรงเรียนของเรา มีผู้เรียน 5 คนในลิสต์ของเรา

ฟังก์ชัน map() ถูกนำไปใช้กับเนื้อหาของตัวแปร Python student_roster ฟังก์ชัน map() รับอาร์กิวเมนต์สองตัว: ฟังก์ชัน (ในกรณีนี้ mergeNamesAndGrades) และ iterable object (students)

เมธอด map() นำฟังก์ชัน mergeNamesAndGrades() ไปใช้กับนักเรียนแต่ละคนในลิสต์ของเรา

การแปลง Python Map เป็น List

อย่างไรก็ตาม โปรแกรมของเรายังไม่เสร็จ ฟังก์ชัน map() คืนค่า mapped object ไม่ใช่ลิสต์สมบูรณ์ของเรา หากเราพิมพ์ตัวแปร student_roster ของเราออกมาตอนนี้ โค้ดของเราจะคืนค่า mapped object แบบนี้:

<map object at 0x7f2c74103890>

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

print(list(student_roster))

โค้ดของเราคืนค่าลิสต์ Python ดังนี้:

['Lucy First Grade', 'Bill First Grade', 'Graham First Grade', 'Tommy First Grade', 'Leslie First Grade']

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

def changeCase(name):
    return name.upper()
student_roster = ['Lucy First Grade', 'Bill First Grade', 'Graham First Grade', 'Tommy First Grade', 'Leslie First Grade']
final_student_roster = map(changeCase, student_roster)
print(list(final_student_roster))

โค้ดของเราคืนค่าลิสต์ที่เราสามารถวนซ้ำได้:

['LUCY FIRST GRADE', 'BILL FIRST GRADE', 'GRAHAM FIRST GRADE', 'TOMMY FIRST GRADE', 'LESLIE FIRST GRADE']

ในตัวอย่างนี้ เรากำหนดฟังก์ชันชื่อ changeCase ฟังก์ชันนี้เปลี่ยนชื่อนักเรียนแต่ละคนเป็นตัวพิมพ์ใหญ่ เราใช้ฟังก์ชัน Python upper() เพื่อแปลงเคสของแต่ละชื่อ

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

Python Map Function กับ Lambda

ฟังก์ชัน Python map() สามารถใช้กับฟังก์ชัน lambda เพื่อทำให้โค้ดของเรามีประสิทธิภาพมากขึ้น ในตัวอย่างข้างต้น เราประกาศฟังก์ชันใหม่เพื่อเปลี่ยน iterable ของเราในลักษณะเฉพาะ

แต่ถ้าเราต้องการดำเนินการบน iterable object แค่ครั้งเดียว ไม่จำเป็นต้องประกาศฟังก์ชันใหม่ แทนที่จะเป็นเช่นนั้น เราสามารถใช้ Python lambda function ซึ่งเป็นฟังก์ชันขนาดเล็ก ไม่มีชื่อ

Lambda functions สามารถใช้กับ map() สำหรับฟังก์ชันเล็กๆ ที่เราไม่ต้องการกำหนดฟังก์ชันใหม่

เนื่องจาก lambda functions กระชับกว่าฟังก์ชันทั่วไป คุณควรพยายามใช้มันเมื่อทำได้ การใช้ lambda functions สำหรับฟังก์ชันง่ายๆ จะช่วยปรับปรุงความอ่านง่ายของโค้ดของคุณ

นี่คือตัวอย่างของ lambda ที่ใช้แปลงเคสของลิสต์ชื่อนักเรียนเป็นตัวพิมพ์ใหญ่ เหมือนที่เราทำข้างต้น:

student_roster = ['Lucy First Grade', 'Bill First Grade', 'Graham First Grade', 'Tommy First Grade', 'Leslie First Grade']
final_student_roster = map(lambda s: s.upper(), student_roster)
print(list(final_student_roster))

เราไม่ได้ประกาศฟังก์ชันใหม่เพื่อแปลงเคสของชื่อนักเรียนเป็นตัวพิมพ์ใหญ่ แทนที่จะเป็นเช่นนั้น เราใช้ lambda s: s.upper() ซึ่งเป็นฟังก์ชันขนาดเล็ก ไม่มีชื่อ ที่จะแปลงเคสของชื่อนักเรียนของเรา

โค้ดของเราคืนค่าดังนี้:

['LUCY FIRST GRADE', 'BILL FIRST GRADE', 'GRAHAM FIRST GRADE', 'TOMMY FIRST GRADE', 'LESLIE FIRST GRADE']

สรุป

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

ในบทช่วยสอนนี้ เราอภิบายวิธีที่คุณสามารถใช้ map() ใน Python เพื่อนำฟังก์ชันไปใช้กับองค์ประกอบทั้งหมดภายใน iterable object เรายังอภิบายวิธีที่คุณสามารถใช้ Python lambda function กับ map() เพื่อสร้างโค้ดที่มีประสิทธิภาพมากขึ้น

คุณตอนนี้มีความรู้ Python ที่จำเป็นเพื่อเริ่มใช้ map() อย่างมืออาชีพแล้ว