enumerate() เป็นฟังก์ชันในตัว (built-in function) ของ Python ที่เพิ่มตัวนับ (counter) ให้กับ Iterables (เช่น list, tuple, string, set, dictionary หรือ objects ที่สามารถวนซ้ำได้) และส่งคืนออกมาเป็น Object ที่สามารถวนซ้ำได้ ซึ่งแต่ละรอบจะให้ค่าเป็น คู่ของ (index, value)
พูดง่ายๆ คือ มันช่วยให้คุณสามารถวนลูปผ่านสมาชิกของ Iterables พร้อมกับได้เลขลำดับ (Index) ของสมาชิกนั้นๆ ไปด้วยในเวลาเดียวกัน ทำให้โค้ดกระชับขึ้น อ่านง่ายขึ้น และมีประสิทธิภาพมากขึ้น
Python enumerate() ทำไมต้องใช้
เมื่อทำงานกับลิสต์ (list), ทูเพิล (tuple), หรือข้อมูลประเภทลำดับ (sequence) อื่นๆ ใน Python บ่อยครั้งที่เราต้องการเข้าถึงทั้ง "ค่า" ของแต่ละสมาชิก และ "ลำดับ (index)" ของสมาชิกนั้นๆ ด้วยพร้อมกัน นักพัฒนา Python มือใหม่หลายคนอาจจะคุ้นเคยกับการวนลูปโดยใช้ range(len()) เพื่อเข้าถึง Index ก่อน แล้วค่อยนำ Index นั้นไปดึงค่าออกมา แต่ Python มีฟังก์ชันที่สง่างามและมีประสิทธิภาพมากกว่านั้น นั่นคือ enumerate()
โครงสร้างการใช้งาน enumerate()
โค้ด: เลือกทั้งหมด
enumerate(iterable, start=0)
start: (Optional) คือค่าเริ่มต้นของตัวนับ Index หากไม่ระบุ ค่าเริ่มต้นจะเป็น 0
ทำไมต้องใช้ enumerate() แทน range(len())?
ลองดูตัวอย่างการเปรียบเทียบการวนลูปแบบปกติกับการใช้ enumerate() เพื่อให้เห็นภาพชัดเจน:
แบบที่ 1: การวนลูปด้วย range(len()) (ไม่แนะนำ)
โค้ด: เลือกทั้งหมด
fruits = ["apple", "banana", "cherry", "orange"]
print("--- ใช้ range(len(fruits)) ---")
for i in range(len(fruits)):
print(f"Index: {i}, Fruit: {fruits[i]}")
ข้อเสีย:
- ต้องเรียก len() และ range() ซึ่งเพิ่มความซับซ้อนของโค้ด
- ต้องเข้าถึงสมาชิกของลิสต์ด้วย fruits ซึ่งบางครั้งอาจทำให้เกิดข้อผิดพลาดถ้า Index อยู่นอกขอบเขต
- อ่านยากกว่าสำหรับโค้ดที่ซับซ้อนขึ้น
แบบที่ 2: การวนลูปด้วย enumerate() (แนะนำ!)
โค้ด: เลือกทั้งหมด
fruits = ["apple", "banana", "cherry", "orange"]
print("--- ใช้ enumerate() ---")
for index, value in enumerate(fruits):
print(f"Index: {index}, Fruit: {value}")
- โค้ดกระชับและอ่านง่าย: คุณได้รับทั้ง index และ value โดยตรงจาก For Loop
- ลดโอกาสเกิดข้อผิดพลาด: ไม่ต้องกังวลเรื่อง IndexError เพราะ enumerate() จะจัดการให้คุณเอง
- มีประสิทธิภาพดีกว่า: ในบางกรณี enumerate() อาจมีประสิทธิภาพดีกว่าเล็กน้อย เนื่องจากไม่ต้องมีการเรียก len() และการเข้าถึง Index ซ้ำๆ
ตัวอย่างการใช้งาน enumerate() ในสถานการณ์ต่างๆ
1. เริ่มต้น Index จากค่าอื่นที่ไม่ใช่ 0
คุณสามารถกำหนดค่าเริ่มต้นของ Index ได้โดยใช้พารามิเตอร์ start
โค้ด: เลือกทั้งหมด
students = ["Alice", "Bob", "Charlie"]
print("--- เริ่มต้น Index จาก 1 ---")
for No, student in enumerate(students, start=1):
print(f"เลขที่ {No}: {student}")
String ก็เป็น Iterable เช่นกัน คุณสามารถใช้ enumerate() เพื่อเข้าถึงแต่ละตัวอักษรพร้อมกับ Index ได้
โค้ด: เลือกทั้งหมด
word = "Python"
print("--- ใช้งานกับ String ---")
for i, char in enumerate(word):
print(f"Char at index {i}: {char}")
ฟังก์ชัน enumerate() ใน Python เป็นเครื่องมือที่ยอดเยี่ยมในการวนลูปผ่าน Iterables โดยได้ทั้ง Index และ Value ไปพร้อมกัน ทำให้โค้ดของคุณสะอาดขึ้น อ่านง่ายขึ้น และมีประสิทธิภาพมากขึ้น หากคุณสนใจเรียนรู้ Python เพิ่มเติมได้ที่ Python - เทคนิคการเขียนไพทอน
ลิ้งค์อ้างอิง
- https://www.mindphp.com/developer/tips- ... n-oop.html
- https://www.mindphp.com/บทเรียนออนไลน์/ ... -type.html
- https://www.mindphp.com/บทเรียนออนไลน์/ ... -type.html
- viewtopic.php?t=115050
- https://www.mindphp.com/developer/tips-python.html
- https://devhub.in.th/learn/python/enumerate