ฟังก์ชัน Python map () อธิบายด้วยตัวอย่าง

เผยแพร่แล้ว: 2022-08-25

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

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

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

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

วิธีการใช้ฟังก์ชันกับองค์ประกอบของรายการ Python

ใช้ฟังก์ชันกับองค์ประกอบของรายการ Python

เริ่มการสนทนาของเราด้วยตัวอย่าง

ที่นี่ nums เป็นรายการตัวเลข

 nums = [2,4,3,7]

ต่อไป พิจารณาฟังก์ชัน self_pow() ฟังก์ชัน self_pow() ใช้ตัวเลขเป็นอาร์กิวเมนต์และส่งกลับตัวเลขที่ยกกำลังของตัวเลขเอง: n**n

ใน Python ** เป็นตัวดำเนินการยกกำลัง a**b ส่งคืนค่า a ยกกำลัง b, a b

 def self_pow(n): return n**n

สิ่ง ที่ต้องทำ : เพื่อสร้างรายการใหม่ nums_pow โดยใช้ฟังก์ชัน self_pow() กับทุกองค์ประกอบในรายการ nums

ใช้สำหรับ Loop

ในการทำเช่นนี้ คุณสามารถใช้ for ลูปใน Python:

  • สำหรับทุกหมายเลขในรายการ nums ให้เรียกใช้ฟังก์ชัน self_pow() โดยมี num เป็นอาร์กิวเมนต์
  • ผนวกผลลัพธ์ของการเรียกใช้ฟังก์ชันต่อท้ายรายการใหม่ nums_pow
 nums_pow = [] for num in nums: nums_pow.append(self_pow(num)) print(nums_pow)

ในผลลัพธ์ ตัวเลขทุกจำนวนจะถูก nums ขึ้นเอง องค์ประกอบในรายการ nums_pow มีดังนี้: 2 2 , 4 4 , 3 3 ,7 7

 Output [4, 256, 27, 823543]

การใช้ความเข้าใจรายการ

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

หลามแผนที่ฟังก์ชั่นแรงจูงใจ

จากนั้นเราสามารถแก้ไขนิพจน์ความเข้าใจรายการทั่วไปได้:

 new_list = [<output expression> for item in iterable]

นิพจน์ความเข้าใจรายการเพื่อสร้างรายการ nums_pow มีดังต่อไปนี้:

 nums_pow = [self_pow(num) for num in nums] print(nums_pow)

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

 Output [4, 256, 27, 823543]

แทนที่จะใช้ loop และ list comprehension คุณสามารถใช้ฟังก์ชัน Python map() กับไวยากรณ์ที่กระชับซึ่งช่วยนำฟังก์ชันนี้ไปใช้กับรายการทั้งหมดใน iterable เริ่มต้นด้วยการเรียนรู้ไวยากรณ์ของฟังก์ชันแผนที่

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

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

ไวยากรณ์ทั่วไปที่จะใช้ ฟังก์ชัน Python map() มีดังนี้:

 map(function, iterable_1,[iterable_2,...,iterable_n])

ฟังก์ชัน map() รับ อย่างน้อย สองอาร์กิวเมนต์ คือ ฟังก์ชัน และฟังก์ชัน iterable

ในไวยากรณ์ข้างต้น:

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

ฟังก์ชัน map() ส่งคืนอะไร

ส่งคืนวัตถุแผนที่ จากนั้น คุณสามารถส่งวัตถุแผนที่ไปยังรายการโดยใช้ไวยากรณ์: list(map(function,iterable)).

ขึ้นอยู่กับกรณีการใช้งาน คุณสามารถส่งไปยัง Python tuple

ฟังก์ชัน map() ส่งคืนอะไร

ตอนนี้คุณได้เรียนรู้ไวยากรณ์ของฟังก์ชัน Python map() แล้ว มาเริ่มเขียนโค้ดตัวอย่างกัน

คุณควรมี Python 3.x เพื่อติดตามพร้อมกับบทช่วยสอนนี้ มิฉะนั้น คุณสามารถเรียกใช้ข้อมูลโค้ดในโปรแกรมแก้ไข Python ออนไลน์ของ Geekflare

วิธีใช้ฟังก์ชัน map() กับฟังก์ชันที่กำหนดโดยผู้ใช้

ใช้ฟังก์ชัน map() กับฟังก์ชันที่กำหนดโดยผู้ใช้

#1 . ก่อนหน้านี้ เราได้ใช้ self_pow() กับทุกหมายเลขในรายการ nums ในฟังก์ชันไวยากรณ์สำหรับ map() เราสามารถส่งผ่านฟังก์ชัน self_pow และรายการ nums เป็นอาร์กิวเมนต์ได้

หมายเหตุ : คุณควรระบุชื่อฟังก์ชันเท่านั้น ไม่ใช่การเรียกใช้ฟังก์ชัน ใช้ self_pow ไม่ใช่ self_pow()

ฟังก์ชัน map() ส่งกลับวัตถุแผนที่

 print(map(self_pow,nums)) <map object at 0x7f7d315c14d0>

จากนั้นเราสามารถส่งวัตถุแผนที่ลงในรายการโดยใช้ฟังก์ชัน list() ดังที่แสดงด้านล่าง

 nums_pow = list(map(self_pow,nums)) print(nums_pow)

นี่คือผลลัพธ์ที่ทุก ๆ num ใน nums ถูกแมปกับ num num ในรายการ nums_pow

 Output [4, 256, 27, 823543]

#2 . พิจารณาฟังก์ชันต่อไปนี้ inch_to_cm() ที่แปลงนิ้วเป็นเซนติเมตร 1 นิ้ว = 2.54 ซม .

 def inch_to_cm(inch): return inch*2.54

ในการแปลงค่านิ้วในรายการ inches เป็นเซนติเมตร คุณสามารถใช้ฟังก์ชัน map() ตามที่แสดงในเซลล์รหัสด้านล่าง

 inches = [5.54,3.4,1,25,8.2] cms = list(map(inch_to_cm,inches)) print(cms)

รายการ cms มีค่านิ้วที่แสดงเป็นเซนติเมตร

 Output [14.0716, 8.636, 2.54, 63.5, 20.828]

วิธีใช้ฟังก์ชั่น map() พร้อมฟังก์ชั่นในตัว

ใช้ฟังก์ชัน map() พร้อมฟังก์ชันในตัว

ในส่วนนี้ เราจะเรียนรู้วิธีใช้ map() ที่มีฟังก์ชันในตัวใน Python

#1 . strings รายการเป็นรายการภาษาโปรแกรม คุณต้องการสร้างรายการใหม่ strings_upper ที่มีสตริงภาษาการเขียนโปรแกรมเป็นตัวพิมพ์ใหญ่

 strings = ['JavaScript','Rust','Python','Go']

เมธอดสตริงในตัว . .upper() ทำหน้าที่กับสตริงและส่งคืนสำเนาที่จัดรูปแบบเป็นตัวพิมพ์ใหญ่

 strings_upper = list(map(str.upper,strings)) print(strings_upper)

รายการ strings_upper รวมสตริงในรายการ strings จัดรูปแบบเป็นตัวพิมพ์ใหญ่

 Output ['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2 . ฟังก์ชัน len() ในตัวใน Python จะใช้ลำดับเป็นอาร์กิวเมนต์และส่งกลับความยาว ในการหาความยาวของแต่ละสตริงในรายการ strings เราสามารถใช้ฟังก์ชัน map() และใช้ฟังก์ชัน length กับแต่ละสตริงดังที่แสดงด้านล่าง

 strings_len = list(map(len,strings)) print(strings_len)
 Output [10, 4, 6, 2]

#3 . คุณสามารถใช้ฟังก์ชัน map() กับคอลเลกชั่นอื่นๆ เช่น ทูเพิล

ตัวอย่างต่อไปนี้ประกอบด้วยทูเพิลที่มีข้อมูลเกี่ยวกับจำนวนห้องนอน พื้นที่ และเมืองที่บ้านหลังหนึ่งตั้งอยู่

ใน Python ฟังก์ชัน type() จะคืนค่าประเภทข้อมูลของอ็อบเจกต์ Python ใดๆ ในการรับประเภทข้อมูลของรายการทั้งหมดใน tuple นี้ คุณสามารถใช้ฟังก์ชัน map() เพื่อเรียกใช้ฟังก์ชัน type บนแต่ละรายการ tuple

 house = (2,758.5,'Bangalore') house_elt_type = tuple(map(type,house)) print(house_elt_type)

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

ในผลลัพธ์ด้านล่าง เราเห็นว่าประเภทข้อมูลของ 2, 758.5 ​​และบังกาลอร์ได้รับการอนุมานเป็น 'int', 'float' และ 'str' ตามลำดับ

 Output (<class 'int'>, <class 'float'>, <class 'str'>)

#4 . ใน Python คุณสามารถนำเข้าโมดูลในตัวและใช้ฟังก์ชันที่กำหนดไว้ในโมดูลได้

ในการคำนวณรากที่สองของตัวเลขทุกตัวในรายการ nums คุณสามารถใช้ฟังก์ชันรากที่สอง sqrt จากโมดูลคณิตศาสตร์ได้

 import math nums = [30,90,34,45,97] nums_sqrt = list(map(math.sqrt,nums)) print(nums_sqrt)
 Output [5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

เอาต์พุตข้างต้นแยกวิเคราะห์และติดตามได้ยาก คุณอาจต้องการปัดเศษค่ารากที่สองแต่ละค่าเป็นทศนิยมสองตำแหน่ง

วิธีปัดเศษจำนวนทศนิยมใน Python

มากำหนดฟังก์ชัน round_2() ที่ใช้ค่าทศนิยมแล้วปัดเป็นทศนิยมสองตำแหน่ง

 def round_2(num): return round(num,2)

ตอนนี้คุณสามารถใช้ฟังก์ชัน map() กับรายการ round_2 และ nums_sqrt

 nums_sqrt_round = list(map(round_2,nums_sqrt)) print(nums_sqrt_round)
 Output [5.48, 9.49, 5.83, 6.71, 9.85]

คุณยังสามารถใช้ฟังก์ชัน map() ที่ซ้อนกัน โดยที่ฟังก์ชันแผนที่ภายในใช้เพื่อคำนวณ list nums_sqrt และฟังก์ชันแผนที่ภายนอกจะดำเนินการปัดเศษ

 nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums)))) print(nums_sqrt_round)
 Output [5.48, 9.49, 5.83, 6.71, 9.85]

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

วิธีใช้ฟังก์ชัน map() กับฟังก์ชัน Lambda

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

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

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

หมายเหตุ : lambda args: expression เป็นไวยากรณ์ทั่วไปในการใช้ฟังก์ชัน Python lambda

#1 . พิจารณา strings รายการต่อไปนี้ สมมติว่าคุณต้องการรับรายการ strings_rev ซึ่งมีสำเนากลับรายการของแต่ละสตริง

 strings = ['JavaScript','Rust','Python','Go']

เราสามารถย้อนกลับสตริง Python โดยใช้การแยกสตริง

หมายเหตุ : นี่เป็นลักษณะทั่วไปของนิพจน์การแยกสตริง str[start:stop:step]

– หากไม่มีค่า start และ stop สไลซ์จะเริ่มต้นที่จุดเริ่มต้นของสตริงและขยายไปจนถึงจุดสิ้นสุดของสตริง
– ค่าลบของ step จะช่วยให้ชิ้นเริ่มต้นจากจุดสิ้นสุดของสตริง
– ดังนั้น str[::-1] จะคืนค่าสำเนาของ str.

คุณสามารถใช้ฟังก์ชันแลมบ์ดานี้: lambda x:x[::-1] ภายในฟังก์ชันแผนที่ดังที่แสดงด้านล่าง

 strings_rev = list(map(lambda x:x[::-1],strings)) print(strings_rev)

เช่นเดียวกับตัวอย่างอื่นๆ เราใส่วัตถุแผนที่ลงในรายการ ในผลลัพธ์ เราจะเห็นว่าแต่ละสตริงในรายการสตริงมีการกลับรายการ

 Output ['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2 . ในส่วนที่แล้ว เราคำนวณรากที่สองของทุกตัวเลขในรายการตัวเลข แล้วปัดเศษค่ารากที่สองแต่ละค่าให้เป็นทศนิยมสองตำแหน่ง

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

 nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt)) print(nums_sqrt_round_l)

ดังที่แสดงด้านล่าง ผลลัพธ์จะเหมือนกับสิ่งที่เราได้รับจากการใช้ round_2()

 Output [5.48, 9.49, 5.83, 6.71, 9.85]

วิธีใช้ฟังก์ชัน map() กับหลาย Iterables

ใช้ฟังก์ชัน map() กับหลาย Iterables

ในตัวอย่างที่เราได้เห็น เราใช้ฟังก์ชันกับทุกรายการที่สามารถทำซ้ำได้เพียงรายการเดียว

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

นอกจากนี้เรายังสามารถใช้ฟังก์ชัน Python map() กับหลายรายการได้

#1 . พิจารณาฟังก์ชัน area() ต่อไปนี้ที่รับ length และ breadth เป็นอินพุตและส่งกลับพื้นที่, length*breadth

 def area(length,breadth): return length*breadth

ความยาวและความกว้างของสี่เหลี่ยมผืนผ้าต่างๆ จะถูกจัดเก็บไว้ในรายการแยกกัน 2 รายการ คือ lengths และ ความ breadths ตามลำดับ

 lengths = [4,8,10,18] breadths = [9,4,6,11]

เราสามารถใช้ฟังก์ชัน map() เพื่อใช้ฟังก์ชันพื้นที่ในรายการด้านบนโดยส่งผ่านรายการทั้ง lengths และความ breadths

 areas = list(map(area,lengths,breadths)) print(areas)

เนื่องจากพื้นที่ฟังก์ชันยอมรับสองอาร์กิวเมนต์ ค่าความยาวและความกว้างจึงถูกใช้จากรายการ breadths lengths ลำดับ

 Output [36, 32, 60, 198]

#2 . โมดูลคณิตศาสตร์ Python มีฟังก์ชันบันทึกที่ช่วยให้เราคำนวณลอการิทึมของตัวเลขเป็นฐานใดๆ

หมายเหตุ : log(x, base) คืนค่าของ log x ไปยังฐานที่ระบุโดยค่า base , log base x หากไม่ได้ระบุฐาน ค่าฐานเริ่มต้นคือ e (บันทึกจะคำนวณลอการิทึมธรรมชาติ)

ในตัวอย่างนี้:

  • รายการ x สอดคล้องกับค่าที่คุณต้องการคำนวณลอการิทึม
  • รายการ base ประกอบด้วยค่าฐานทั้งหมดที่จะใช้ในการคำนวณลอการิทึม
 x = [2,6,12,10] base = [2,3,2,5]

เราสามารถใช้ฟังก์ชัน Python map() กับ math.log รายการ x และ base เพื่อรับรายการใหม่ log_x ดังนี้

 log_x = list(map(math.log,x,base)) print(log_x)

นี่คือผลลัพธ์

 Output [1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

บทสรุป

นี่คือบทสรุปของสิ่งที่คุณได้เรียนรู้ในบทช่วยสอนนี้:

  • ฟังก์ชัน Python map() รับอย่างน้อยสองอาร์กิวเมนต์: ฟังก์ชัน และ ฟังก์ชัน iterable พร้อมด้วย syntax map(function, iterable(s))
  • ฟังก์ชัน นี้สามารถเรียกใช้ Python ที่ถูกต้องได้
  • เมื่อ ฟังก์ชัน รับอาร์กิวเมนต์ k ให้ใช้ฟังก์ชัน map() กับฟังก์ชันและอาร์กิวเมนต์ k แต่ละรายการใน iterable

ต่อไป เรียนรู้การทำงานกับชุดใน Python