ผมเชื่อว่าหลาย ๆ ท่านที่เคยเรียนเขียนโปรแกรม ไม่ช้าก็เร็วจะต้องเจอกับสิ่งที่เรียกว่า list หรือในบางภาษาจะเป็น array และมักจะต้องเจอกับการวนลุปซ้ำไปซ้ำมาเพื่อแก้ข้อมูล หรือสร้าง list หรือ array ตัวใหม่ หากเราใช้การวนลูปแบบเดิม โค้ดจะยาวมากและต้องเขียนซ้ำ ๆ แบบนี้
a_list = [1, 3, 4, 5 ,8]
new_list = []
for i in a_list:
new_list.append(i**2)
ในโค้ดนี้คือตัวอย่างของการสร้าง list ที่มีสมาชิกทุกตัวเป็นกำลังสองของ list ตัวเดิม ถ้าเราจะต้องทำแบบนี้ตลอด โค้ดเราจะรกอย่างแน่นอน
List Comprehension
List Comprehension คือการสร้าง list ตัวใหม่จากสิ่งที่เรียกว่า iterable (สิ่งที่ใช้ for loop ได้) ตัวอย่างเบื้องต้นจะเป็นแบบนี้
a_list = [a for a in range(30)]
แปลว่า a_list
จะเป็น list ของ a
โดย a
อยุ่ใน range(30)
มันอาจจะดูไม่มีประโยชน์ถ้าเราทำแบบนี้ แต่เราสามารถใส่เงื่อนไขหรือการแปลงข้อมูลลงไปใน list comprehension ได้
a_list = [a**2 for a in range(30) if a % 3 == 0]
โค้ดนี้แปลว่า a_list
เป็น list ของ a**2
(a ยกกำลังสอง) โดย a
อยุ่ใน range(30)
ถ้า a
หารด้วย 3 ลงต้ว
การทำแบบนี้จะช่วยลดการทำ for loop และยังข่วยให้โค้ดอ่านง่ายขึ้นด้วยครับ ถ้าสังเกตดี ๆ จะพบว่ารุัปแบบของ list comprehension จะคล้าย ๆ กับการนิยาม set ในม.ปลายเลยครับ
นอกจากนี้ยังมีเทคนิคในการสร้าง list จาก iterator ด้วยวิธีอื่นเช่น map filter ด้วยนะครับ