การเขียน For-loop แบบ บรรทัดเดียว ด้วย Python

Kritthanit Malathong
2 min readApr 18, 2022

--

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 แบบ บรรทัดเดียว สามารถอ่านได้ที่นี่

--

--

No responses yet