Python map() คืออะไร? ประยุกต์ใช้เพื่อเปลี่ยนข้อมูลในพริบตา

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderator: mindphp, ผู้ดูแลกระดาน

Sakana
PHP Super Member
PHP Super Member
โพสต์: 307
ลงทะเบียนเมื่อ: 16/06/2025 9:38 am

Python map() คืออะไร? ประยุกต์ใช้เพื่อเปลี่ยนข้อมูลในพริบตา

โพสต์ที่ยังไม่ได้อ่าน โดย Sakana »

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

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

map() คืออะไร?
map() เป็นฟังก์ชัน Built-in ใน Python ที่ใช้สำหรับ "ประยุกต์ใช้ (apply)" ฟังก์ชันที่ระบุลงบนสมาชิกแต่ละตัวของ Iterable (เช่น list, tuple, string, set) และส่งคืน Object ชนิด map ซึ่งเป็น Iterator ที่จะให้ผลลัพธ์ทีละตัวเมื่อถูกเรียกใช้

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

โครงสร้างการใช้งาน map()

โค้ด: เลือกทั้งหมด

map(function, iterable, ...)
function: คือฟังก์ชันที่คุณต้องการนำไปประยุกต์ใช้กับสมาชิกแต่ละตัวของ Iterable ฟังก์ชันนี้จะต้องรับ Argument อย่างน้อยหนึ่งตัว (ตามจำนวน Iterables ที่ให้มา)
iterable: คือ Object ที่สามารถวนซ้ำได้ (เช่น list, tuple) ที่คุณต้องการนำฟังก์ชันไปประยุกต์ใช้ คุณสามารถใส่ได้หลาย Iterable ถ้าฟังก์ชันของคุณรับ Argument หลายตัว

ทำไมถึงควรใช้ map()?
- โค้ดกระชับ (Concise Code): ช่วยลดจำนวนบรรทัดของโค้ดเมื่อเทียบกับการเขียนลูป for แบบปกติ
- อ่านง่าย (Readability): เมื่อคุณเข้าใจแนวคิดของ map() โค้ดจะอ่านง่ายขึ้นว่ากำลังทำอะไร (คือการ map ฟังก์ชันกับข้อมูล)
- ประสิทธิภาพ (Performance): โดยทั่วไป map() (โดยเฉพาะเมื่อเทียบกับ for loop ที่มีกระบวนการซับซ้อน) มักจะมีประสิทธิภาพดีกว่าเล็กน้อยสำหรับงานที่ต้องประมวลผลข้อมูลจำนวนมาก เนื่องจากมันถูก optimize มาจากระดับ C code

ตัวอย่างการใช้งาน map()

1. การประยุกต์ใช้ฟังก์ชันกับลิสต์ (พื้นฐานที่สุด)
เรามาลองสร้างลิสต์ของตัวเลข และใช้ map() เพื่อยกกำลังสองให้แต่ละตัวเลขกัน

โค้ด: เลือกทั้งหมด

# ฟังก์ชันสำหรับยกกำลังสอง
def square(number):
    return number * number

numbers = [1, 2, 3, 4, 5]

# ใช้ map() เพื่อประยุกต์ใช้ฟังก์ชัน square กับทุกสมาชิกใน numbers
# map_object จะเป็น iterator
squared_numbers_map = map(square, numbers)

# หากต้องการเห็นผลลัพธ์เป็น list ต้องแปลงเป็น list ก่อน
squared_numbers_list = list(squared_numbers_map)

print(f"Original numbers: {numbers}")
print(f"Squared numbers: {squared_numbers_list}")
ผลลัพธ์:
Python Knowledge-1.png
Python Knowledge-1.png (2.06 KiB) Viewed 95 times
2. ใช้ lambda ฟังก์ชันร่วมกับ map() (พบบ่อยมาก)
สำหรับฟังก์ชันง่ายๆ ที่ไม่จำเป็นต้องประกาศแยกต่างหาก เรานิยมใช้ lambda ฟังก์ชันร่วมกับ map() เพื่อให้โค้ดสั้นลงไปอีก

โค้ด: เลือกทั้งหมด

# แปลงชื่อในลิสต์ให้เป็นตัวพิมพ์ใหญ่ทั้งหมด
names = ["alice", "bob", "charlie"]

# ใช้ lambda เพื่อแปลง string เป็น uppercase
uppercase_names_map = map(lambda name: name.upper(), names)

uppercase_names_list = list(uppercase_names_map)

print(f"Original names: {names}")
print(f"Uppercase names: {uppercase_names_list}")
ผลลัพธ์:
Python Knowledge-1.png
Python Knowledge-1.png (2.49 KiB) Viewed 95 times
3. map() กับหลาย Iterables
ฟังก์ชันที่คุณส่งให้ map() สามารถรับ Argument ได้มากกว่าหนึ่งตัว ซึ่งหมายความว่าคุณสามารถ "map" กับหลาย Iterables พร้อมกันได้

โค้ด: เลือกทั้งหมด

# รวมชื่อและคะแนนเข้าด้วยกัน
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]

# ฟังก์ชันสำหรับสร้างข้อความแสดงผล
def format_score(name, score):
    return f"{name}: {score} points"

# ใช้ map() กับสอง iterables
formatted_results_map = map(format_score, names, scores)

formatted_results_list = list(formatted_results_map)

print(f"Formatted results: {formatted_results_list}")
ผลลัพธ์:
Python Knowledge-1.png
Python Knowledge-1.png (2.41 KiB) Viewed 95 times
4. การแปลงข้อมูลชนิดต่างๆ
map() ยังมีประโยชน์ในการแปลงชนิดข้อมูลของสมาชิกใน Iterable ได้อย่างรวดเร็ว เช่น การแปลงสตริงที่เป็นตัวเลขให้เป็น int หรือ float

โค้ด: เลือกทั้งหมด

string_numbers = ["1", "2", "3", "4", "5"]

# แปลง string เป็น int
int_numbers_map = map(int, string_numbers)
int_numbers_list = list(int_numbers_map)

print(f"String numbers: {string_numbers}")
print(f"Integer numbers: {int_numbers_list}")
ผลลัพธ์:
Python Knowledge-1.png
Python Knowledge-1.png (2 KiB) Viewed 95 times
เมื่อไหร่ควรใช้ map():
- เมื่อคุณมีฟังก์ชันที่ถูกประกาศไว้แล้วและต้องการนำไปประยุกต์ใช้กับ Iterable โดยไม่ต้องสร้างฟังก์ชัน lambda ที่ซับซ้อน
- เมื่อฟังก์ชันนั้นถูกนำไปใช้กับ Iterables หลายตัว (เช่นในตัวอย่าง format_score)
- เมื่อต้องการผลลัพธ์เป็น Iterator (เพื่อประหยัด Memory สำหรับชุดข้อมูลขนาดใหญ่ เพราะจะประมวลผลทีละตัว)

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

ลิ้งค์อ้างอิง
- https://www.mindphp.com/คู่มือ/73-คืออะ ... ออะไร.html
- https://www.mindphp.com/บทเรียนออนไลน์/ ... mming.html
- viewtopic.php?t=45663
- viewtopic.php?t=90492
- viewtopic.php?t=115050
- viewtopic.php?f=144&t=107367
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 2