ฟังก์ชัน Python map () อธิบายด้วยตัวอย่าง
เผยแพร่แล้ว: 2022-08-25ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีใช้ ฟังก์ชัน Python map() เพื่อใช้ฟังก์ชันกับรายการทั้งหมดของ iterable
Python รองรับกระบวนทัศน์ การเขียนโปรแกรมเชิงฟังก์ชัน ที่ให้คุณกำหนดงานเป็นการคำนวณฟังก์ชันโดยทางโปรแกรม คุณสามารถถือว่าฟังก์ชัน Python เป็นอ็อบเจ็กต์ได้: ฟังก์ชันสามารถรับฟังก์ชันอื่นเป็นพารามิเตอร์และส่งกลับฟังก์ชันอื่นได้
ฟังก์ชัน map()
รับหน้าที่เป็นอาร์กิวเมนต์ และให้คุณนำไปใช้กับรายการทั้งหมดในลำดับ
ในตอนท้ายของบทช่วยสอนนี้ คุณจะสามารถใช้ฟังก์ชัน Python map()
เพื่อเขียนลูป verbose ใหม่และแสดงรายการความเข้าใจ คุณจะต้องเขียนโค้ดตัวอย่างหลายๆ ตัวอย่างเพื่อทำความเข้าใจวิธีต่างๆ ที่คุณสามารถใช้ฟังก์ชัน map()
วิธีการใช้ฟังก์ชันกับองค์ประกอบของรายการ 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

ตอนนี้คุณได้เรียนรู้ไวยากรณ์ของฟังก์ชัน Python map()
แล้ว มาเริ่มเขียนโค้ดตัวอย่างกัน
คุณควรมี Python 3.x เพื่อติดตามพร้อมกับบทช่วยสอนนี้ มิฉะนั้น คุณสามารถเรียกใช้ข้อมูลโค้ดในโปรแกรมแก้ไข Python ออนไลน์ของ Geekflare
วิธีใช้ฟังก์ชัน 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()
ที่มีฟังก์ชันในตัวใน 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

ในส่วนก่อนหน้านี้ คุณได้เรียนรู้วิธีใช้ฟังก์ชัน 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

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