การเขียน For-loop แบบ บรรทัดเดียว ด้วย Python
Post id: 34, 04/18/2022
รูปแบบปกติของ for-loop
for a in b:
do_some_thing
ตัวอย่างเช่น
for i in range(10):
print(i)
สามารถแปลงได้เป็น
[print(i) for i in range(10)]
# ผลลัพธ์ที่ได้
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
ตัวอย่างที่ 1
x = []
for i in range(10):
x.append(i)
print(x)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
สามารถแปลงได้เป็น
x = [i for i in range(10)]
print(x)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
จะเห็นว่าเราไม่จำเป็นต้องประกาศตัวแปร x ให้เป็น type list ก่อน แล้วค่อย append เหมือนกับการเขียน for-loop แบบหลายบรรทัด
ตัวอย่างที่ 2
x = []
for i in range(10):
if i % 2 == 0:
x.append(1)
else:
x.append(-1)
print(x)
# [1, -1, 1, -1, 1, -1, 1, -1, 1, -1]
สามารถแปลงได้เป็น
x = [1 if i%2 == 0 else -1 for i in range(10)]
print(x)
# [1, -1, 1, -1, 1, -1, 1, -1, 1, -1]
ในตัวอย่างนี้ เราจะเห็นว่าส่วน do_something ของ for-loop ก็คือ if-else ดังนั้นเราจึงต้องแปลง if-else ให้เป็นแบบ บรรทัดเดียวเสียก่อน แล้วค่อยนำมาใส่ในฟอร์มของ for-loop แบบ บรรทัดเดียว
แต่ถ้าหากเราใช้แค่ if ไม่ใช้ else เราจะนำ if ไปไว้ด้านหลัง for-loop ดังนี้
x = [-1, 2, -5, 3, -2, 4, 6]
y = [n for n in x if n > 0]
print(x)
# [2, 3, 4, 6]
ในตัวอย่างนี้คือเราต้องการดึงเฉพาะค่าที่มากกว่า 0 ออกมาจาก list x และเก็บค่าเหล่านั้นไว้ใน list y
หากใครยังไม่เข้าใจการเขียน if-else แบบ บรรทัดเดียว สามารถอ่านได้ที่นี่