อัปเดตล่าสุด Feb. 18, 2023
ในการสร้าง List ขึ้นมาใหม่โดยมีการดัดแปลงจาก List เดิมหรือข้อมูลประเภท Iterable นั้น โดยแบบง่ายๆเราสามารถใช้ for ได้แบบตามโค้ดด้านล่าง
my_list = [1, 2, 3, 4, 5]
new_list = []
for num in my_list:
new_list.append(num*2)
print(new_list)
จากรูปการณ์ทำงานจะมีความตรงไปตรงมาคือ ประกาศตัวแปร List ขึ้นมา, สร้างลิสใหม่ขึ้นมา, ทำการ loop mylist เดิมแล้วนำไปเพิ่มใน newlist โดยนำไปคูณ 2 ก่อนเพิ่มสมาชิก
จะเห็นว่า code ดังกล่าวมีการทำงานที่ตรงไปตรงมาดี แต่เราสามารถลดรูปให้ มีความสั้นกว่าเดิมได้เป็นดังรูปแบบนี้
my_list = [1, 2, 3, 4, 5]
new_list = [num*2 for num in my_list]
print(new_list)
# [2, 4, 6, 8, 10]
จะเห็นได้ว่า code จะลดจากสามบรรทัดเหลือเพียงบรรทัดเดียว เราเรียกการเขียนแบบนี้ว่า list comprehension แล้วมันเขียนยังไงล่ะ?
new_list = [expression for member in iterable]
ในส่วนของ for กับ iterable ก็ใช้เหมือนตอนเราวนลูป for ได้ตามปกติเลย แต่ในส่วนของ expression นั้นเราจะกำหนดค่าที่ return ออกมา เช่นจากในตัวอย่างที่แล้วเรานำ member ไปคูณ 2 ก็จะได้ลิสใหม่ที่มีค่าเป็นสองเท่าจากของเดิม เราสามารถนำ member ไปเข้าฟังก์ชั่นอื่นๆก่อน หรือไปทำอะไรก็ตามแต่เราสะดวกเลย
นอกเหนือจากนี้ เรายังสามารถใส่ conditional หรือพวก if else ให้มันได้ด้วย
new_list = [expression for member in iterable (if conditional)]
จะได้
my_list = [1, 2, 3, 4, 5]
new_list = [num*2 for num in my_list if num*2 < 5]
print(new_list)
# [2, 4]
หากเราต้องการให้ filter ให้สมาชิกยังอยู่ในลิส ตามเงื่อนไขก็ทำได้ตามรูปดังกล่าว
(ตัดสมาชิกออกไปหากคูณสองแล้วน้อยกว่า 5)
my_list = [1, 2, 3, 4, 5]
new_list = [num*2 if num*2 < 5 else None for num in my_list]
print(new_list)
# [2, 4, None, None, None]
กรณีที่เราไม่ต้องการ filter ออกแต่ต้องการ assign ค่าอื่นแทนหากไม่ตรงตามเงื่อนไขก็สามารถย้าย if มาอยู่ข้างหน้าได้และเติม else ลงไปแทน (ในเคสนี้จะหากคูณสองแล้วน้อยกว่า 5 จะใส่ None ลงไป)
อ้างอิง
เปิดโลกการเขียนโปรแกรมและ Software Development ด้วย online courses ที่จะพาคุณอัพสกิลและพัฒนาสู่การเป็นมืออาชีพ เรียนออนไลน์ เรียนจากที่ไหนก็ได้ พร้อมซัพพอร์ตหลังเรียน
เรียนเขียนโปรแกรม