ฝึกใช้ built-in: enumerate()
ในแบบฝึกหัดนี้ จะได้ฝึกใช้ฟังก์ชัน built-in enumerate() ของ Python ฟังก์ชันนี้มีประโยชน์เมื่อต้องการสร้างลิสต์พร้อมดัชนี ลองนึกภาพว่ามีลิสต์รายชื่อแขกที่ทยอยมาถึงงานปาร์ตี้ โดยเรียงตามลำดับการมาถึง (Jerry มาเป็นคนแรก ตามด้วย Kramer และคนอื่น ๆ):
names = ['Jerry', 'Kramer', 'Elaine', 'George', 'Newman']
หากต้องการแนบดัชนีที่แสดงลำดับการมาถึงของแต่ละคน สามารถ ใช้ for loop แบบนี้ได้:
indexed_names = []
for i in range(len(names)):
index_name = (i, names[i])
indexed_names.append(index_name)
[(0,'Jerry'),(1,'Kramer'),(2,'Elaine'),(3,'George'),(4,'Newman')]
แต่นั่นยังไม่ใช่วิธีที่มีประสิทธิภาพที่สุด มาดูกันว่า enumerate() ช่วยให้โค้ดกระชับและมีประสิทธิภาพมากขึ้นได้อย่างไร
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียน Python Code ที่มีประสิทธิภาพ
คำแนะนำการฝึกหัด
- แทนที่จะใช้
for i in range(len(names))ให้อัปเดต for loop โดยใช้iเป็นตัวแปรดัชนี และnameเป็นตัวแปร iterator พร้อมกับใช้enumerate() - เขียน for loop ก่อนหน้าใหม่โดยใช้
enumerate()และ list comprehension เพื่อสร้างลิสต์ใหม่ชื่อindexed_names_comp - สร้างลิสต์อีกชุดหนึ่ง (
indexed_names_unpack) โดยใช้เครื่องหมายดอกจัน (*) เพื่อ unpack enumerate object ที่ได้จากการใช้enumerate()กับnamesคราวนี้ ให้เริ่มดัชนีของenumerate()ที่หนึ่งแทนที่จะเป็นศูนย์
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Rewrite the for loop to use enumerate
indexed_names = []
for ____,_____ in ____(names):
index_name = (i,name)
indexed_names.append(index_name)
print(indexed_names)
# Rewrite the above for loop using list comprehension
indexed_names_comp = [(____,____) for i,name in ____(names)]
print(indexed_names_comp)
# Unpack an enumerate object with a starting index of one
indexed_names_unpack = [____(names, ____)]
print(indexed_names_unpack)