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

ฟังก์ชันแผนที่ Python:คำแนะนำทีละขั้นตอน

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


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

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

ในบทช่วยสอนนี้ โดยใช้ชุดตัวอย่าง เราจะพูดถึงวิธีใช้ map() ฟังก์ชันในภาษาไพทอน

Python Iterable Objects

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

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

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

studentsของเรา ตัวแปรมีรายการซึ่งเป็นวัตถุที่ทำซ้ำได้ ซึ่งหมายความว่าเราสามารถสำรวจผ่านรายการในรายการได้

ไวยากรณ์ฟังก์ชันแผนที่หลาม

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

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

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

map(function, iterable)

อาร์กิวเมนต์แรก map() ฟังก์ชัน take คือฟังก์ชัน นี่คือฟังก์ชันที่จะดำเนินการกับทุกรายการใน iterable ทำซ้ำได้ เป็นอ็อบเจกต์ที่จะทำการ map เช่น list, tuple, dictionary, or set.

วิธีใช้ฟังก์ชันแผนที่ใน Python

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

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

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

def mergeNamesAndGrades(name):
	return name + " First Grade"

students = ["Lucy", "Bill", "Graham", "Tommy", "Leslie"]
student_roster = map(mergeNamesAndGrades, students)

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

ในบรรทัดถัดไป เราจะกำหนดรายชื่อนักเรียนในโรงเรียนของเรา มีนักเรียนห้าคนในรายการของเรา

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

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

การแปลงแผนที่หลามเป็นรายการ

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

<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() ในแต่ละออบเจกต์ใน student_roster . ที่ทำซ้ำได้ของเรา . สุดท้าย โปรแกรมของเราส่งคืนรายชื่อนักเรียนที่แก้ไขแล้วเป็นตัวพิมพ์ใหญ่

ฟังก์ชันแผนที่ Python พร้อมแลมบ์ดา

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

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

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

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

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

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() สามารถใช้ฟังก์ชันเพื่อใช้ฟังก์ชันเฉพาะกับองค์ประกอบทั้งหมดภายในวัตถุที่ทำซ้ำได้ ตัวอย่างเช่น คุณสามารถใช้ map() เพื่อแปลงกรณีของรายการสตริงเป็นตัวพิมพ์ใหญ่ หรือคุณสามารถใช้ฟังก์ชัน map() คูณรายการตัวเลขด้วยจำนวนที่กำหนด

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

ตอนนี้คุณมีความรู้เกี่ยวกับ Python เพียงพอแล้วเพื่อเริ่มใช้งาน map() อย่างมืออาชีพ