List Comprehension คืออะไร และการใช้งานใน Python

January 24th, 2021

ผมเชื่อว่าหลาย ๆ ท่านที่เคยเรียนเขียนโปรแกรม ไม่ช้าก็เร็วจะต้องเจอกับสิ่งที่เรียกว่า 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 ด้วยนะครับ