สำหรับลูปใน Python: ทุกสิ่งที่คุณต้องรู้
เผยแพร่แล้ว: 2022-08-18บทช่วยสอนนี้จะสอนคุณเกี่ยวกับการใช้ for loops ใน Python พร้อมตัวอย่างโค้ด
ในการเขียนโปรแกรม ลูปช่วยให้คุณทำซ้ำชุดคำสั่งเฉพาะ คุณจะใช้ for loops สำหรับการวนซ้ำที่แน่นอนเมื่อ:
- คุณรู้ว่าคุณกำลังทำงานกับลำดับที่มีองค์ประกอบจำนวนจำกัด
- คุณเห็นจำนวนการทำซ้ำล่วงหน้า
บทช่วยสอนนี้จะสอนคุณเกี่ยวกับการทำงานกับลูปใน Python คุณจะเริ่มต้นด้วยการเรียนรู้ไวยากรณ์และการวนซ้ำอย่างง่ายโดยใช้ for loop จากนั้น คุณจะได้เรียนรู้เกี่ยวกับการประมวลผลอาร์กิวเมนต์บรรทัดคำสั่ง การใช้คำสั่งควบคุมลูป และอื่นๆ
มาเริ่มกันเลย…
ไวยากรณ์ของ Python สำหรับ Loop

ไวยากรณ์ทั่วไปสำหรับการใช้ for loop ใน Python มีดังนี้:
for item in iterable: # do something on item statement_1 statement_2 . . . statement_n
ในไวยากรณ์ข้างต้น:
- item เป็นตัวแปรการวนซ้ำ
- iterable หมายถึง Python ใด ๆ ที่ iterable เช่นรายการ tuples และ strings
- statement_1 ถึง statement_n แสดงถึงคำสั่งใน loop body
หมายเหตุ : อย่าลืมเพิ่มโคลอน ( :
) หลังชื่อของ iterable และเยื้องคำสั่งทั้งหมดในเนื้อหาของลูปด้วยช่องว่างสี่ช่อง
ทั่วไปสำหรับการสร้างลูปใน Python

เมื่อใช้ for ลูป:
- คุณสามารถเข้าถึงรายการได้โดยตรงโดยใช้ไวยากรณ์ที่กล่าวถึงในส่วนก่อนหน้า
- คุณสามารถใช้ for วนซ้ำร่วมกับฟังก์ชันในตัวของ Python เช่น
range()
และenumerate()
เราจะกล่าวถึงในส่วนนี้
ใช้สำหรับวนซ้ำเพื่อเข้าถึงองค์ประกอบ
เพื่อปรับปรุงความสามารถในการอ่าน คุณควรเลือกตัวแปรแบบวนซ้ำซึ่งบ่งชี้ว่ารายการมีอะไรบ้าง ตัวอย่างเช่น ในตัวอย่างด้านล่าง nums
คือรายการของตัวเลขที่เราใช้ num
เป็นตัวแปรการวนซ้ำ สังเกตว่า for num in nums:
ใช้งานง่ายและอ่านง่าย
nums = [4,5,9,1,3] for num in nums: print(num) # Output 4 5 9 1 3
เพิ่มตัวอย่างอีกสองสามตัวอย่าง คุณสามารถใช้ for fruit in fruits:
และ for student in students:
เมื่อวนซ้ำผ่าน fruits
และรายชื่อ students
ตามลำดับ
ใช้สำหรับวนรอบกับ range() Function
เมื่อต้องการเข้าถึงรายการผ่านดัชนี คุณสามารถใช้ฟังก์ชัน range()
ใน Python
range(start, stop, step)
จะคืนค่า range object ซึ่งคุณสามารถวนซ้ำเพื่อรับดัชนี:start
,start + step
และอื่นๆ จนถึงแต่ไม่รวมstop
for i in range(len(nums)): print(nums[i]) # Output 4 5 9 1 3
คุณยังสามารถใช้ฟังก์ชัน range()
เพื่อสร้างลำดับของตัวเลขเพื่อวนซ้ำได้ ในตัวอย่างด้านล่าง เราตั้งค่าพารามิเตอร์ step
ที่ไม่บังคับเป็น 2 ดังนั้นเราจึงได้ตัวเลขตั้งแต่ 10 ถึงแต่ไม่รวม 20 ในขั้นตอนที่ 2
for i in range(10,20,2): print(i) # Output 10 12 14 16 18
ใช้สำหรับวนรอบด้วยฟังก์ชัน enumerate()
เมื่อคุณต้องการวนซ้ำผ่าน iterable และเข้าถึงรายการและดัชนีพร้อมกัน คุณสามารถใช้ฟังก์ชัน enumerate()
นี่คือตัวอย่าง
for idx, num in enumerate(nums): print(f"{idx}:{num}") # Output 0:4 1:5 2:9 3:1 4:3

วิธีอ่านรายการจากรายการที่ใช้สำหรับวนซ้ำใน Python
หากต้องการวนซ้ำรายการ Python โดยใช้ for loop คุณสามารถใช้ไวยากรณ์ทั่วไปจากส่วนก่อนหน้าได้
ในตัวอย่างด้านล่าง nums
สามารถทำซ้ำได้ และ num คือตัวแปรการวนซ้ำ
nums = [4,5,9,1,3] for num in nums: print(f"{num} times 3 is {num*3}") # action on each num # Output 4 times 3 is 12 5 times 3 is 15 9 times 3 is 27 1 times 3 is 3 3 times 3 is 9
วิธีวนซ้ำสตริงโดยใช้ลูปใน Python
สตริง Python เป็นแบบวนซ้ำได้ และคุณสามารถทำการวนซ้ำ จัดทำดัชนี แบ่งส่วน และอื่นๆ ได้
หมายเหตุ : Python ไม่มีประเภทข้อมูลอักขระในตัว ดังนั้นคุณจึงสามารถปฏิบัติต่ออักขระหนึ่งตัวเป็นสตริงที่มีความยาวได้
my_string = "Code" for char in my_string: print(char) # Output C o d e
วิธีการวนซ้ำอาร์เรย์ที่ใช้สำหรับวนซ้ำใน Python

คุณสามารถวนซ้ำผ่านอาร์เรย์โดยใช้การวนซ้ำและการซ้อนสำหรับลูป
ในข้อมูลโค้ดด้านล่าง array1 เป็นรายการที่ซ้อนกันซึ่งมีรายการที่เล็กกว่าเป็นองค์ประกอบ ดังนั้นการวนซ้ำผ่าน array1 จะให้แต่ละแถวดังที่แสดงด้านล่าง
array1 = [[2,3],[7,8]] for row in array1: print(row) # Output [2, 3] [7, 8]
ในการเข้าถึงแต่ละองค์ประกอบในแต่ละแถว คุณสามารถใช้อีกอัน for
วนซ้ำได้
array1 = [[2,3],[7,8]] for row in array1: for elt in row: print(elt)
ในเซลล์รหัสด้านบน:
- วงรอบนอกช่วยให้คุณทำดัชนีในแถว
- inner for loop ช่วยให้คุณแตะองค์ประกอบในแต่ละแถวได้
นี่คือผลลัพธ์ที่สอดคล้องกัน
Output 2 3 7 8
วิธีอ่านอาร์กิวเมนต์บรรทัดคำสั่งสำหรับ Loop

ในฐานะนักพัฒนา คุณควรสามารถเรียกใช้สคริปต์ Python จากบรรทัดคำสั่งและใช้อาร์กิวเมนต์บรรทัดคำสั่งเพื่อโต้ตอบกับสคริปต์ได้
คุณสามารถใช้โมดูลในตัวของ Python เช่น sys และ argparse เพื่อแยกวิเคราะห์และอ่านอาร์กิวเมนต์บรรทัดคำสั่ง
ในส่วนนี้ เราจะพูดถึงวิธีใช้โมดูล sys
และใช้ for
loop เพื่อวนซ้ำรายการอาร์กิวเมนต์บรรทัดคำสั่ง
ในโมดูล sys sys.argv
คือรายการอาร์กิวเมนต์บรรทัดคำสั่งที่คุณส่งผ่าน ดังนั้น คุณจึงสามารถวนซ้ำผ่าน sys.argv
ได้ในลักษณะเดียวกับที่คุณวนรอบรายการ Python ใดๆ
# main.py import sys for arg in sys.argv: print(arg)
ตอนนี้คุณสามารถเรียกใช้โปรแกรมจากบรรทัดคำสั่งดังที่แสดงด้านล่าง
$ python main.py Hello Python3 main.py Hello Python3
โดยค่าเริ่มต้น ชื่อของโมดูลคืออาร์กิวเมนต์แรกและอยู่ที่ดัชนีศูนย์ใน sys.argv
หากคุณต้องการเข้าถึงดัชนีและอาร์กิวเมนต์ที่เกี่ยวข้อง คุณสามารถใช้ฟังก์ชัน range()
# main.py import sys for i in range(len(sys.argv)): print(f"arg{i} is {sys.argv[i]}")
️ ต่อไป ให้รัน main.py อีกครั้ง
$ python main.py Hello Python3 arg0 is main.py arg1 is Hello arg2 is Python3
สมมติว่าคุณต้องการแยกวิเคราะห์และประมวลผลอาร์กิวเมนต์อื่นที่ไม่ใช่ชื่อโมดูล คุณสามารถตั้งค่าเริ่มต้นเป็น 1 เช่นเดียวกับในเซลล์รหัสด้านล่าง

# main.py import sys for i in range(1,len(sys.argv)): print(f"arg{i} is {sys.argv[i]}")
$ python main.py Hello Python3 arg1 is Hello arg2 is Python3

เมื่อนำทั้งหมดมารวมกัน ไฟล์ main.py จะมีรหัสดังต่อไปนี้
# main.py import sys print("\nPrinting all command-line arguments...") for arg in sys.argv: print(arg) print("\nPrinting all command-line arguments with index...") for i in range(len(sys.argv)): print(f"arg{i} is {sys.argv[i]}") print("\nPrinting command-line arguments except arg0: module_name...") for i in range(1,len(sys.argv)): print(f"arg{i} is {sys.argv[i]}")
นี่คือผลลัพธ์เมื่อคุณเรียกใช้โมดูล
$ python main.py Hello Python3 Printing all command-line arguments... main.py Hello Python3 Printing all command-line arguments with index... arg0 is main.py arg1 is Hello arg2 is Python3 Printing command-line arguments except arg0: module_name... arg1 is Hello arg2 is Python3
วิธีใช้คำสั่ง break Inside สำหรับ Loop

เช่นเดียวกับภาษาโปรแกรมอื่นๆ Python ยังสนับสนุนการใช้คำสั่ง loop control break
and continue
คำสั่งเหล่านี้สามารถช่วยเปลี่ยนแปลงโฟลว์การควบคุมในลูป โดยขึ้นอยู่กับเงื่อนไขบางประการ เรามาดูวิธีการใช้พวกมันใน for loop กัน
การ break
คำสั่งสามารถใช้เพื่อแยกออกจากลูปเมื่อเงื่อนไขเฉพาะเป็น True
เราต้องการเขียนโปรแกรมเพื่อทำสิ่งต่อไปนี้:
- แก้ไข
k
จำนวนอินพุต - ใช้
for
loop เพื่ออ่านอินพุตของผู้ใช้ - ครั้งละหนึ่งหลักและสรุปตัวเลขที่ไม่ใช่ค่าลบ (มากกว่าหรือเท่ากับศูนย์) - กระบวนการนี้ควรดำเนินต่อไปตราบเท่าที่ผู้ใช้ป้อนตัวเลขที่ไม่เป็นลบ
- เมื่อผู้ใช้ป้อนจำนวนลบ ให้ออกจากลูปและพิมพ์ผลรวมออกมา
นี่คือรหัสที่ทำงานข้างต้น
k= 5 sum = 0 for i in range(k): num = int(input("\nEnter a number: ")) if num<0: break # exit loop when num < 0 sum += num print(sum)
หากผู้ใช้ป้อนตัวเลขที่น้อยกว่าศูนย์ ตัวควบคุมจะแยกลูป for ออกจากคำสั่งแรกหลังลูป
Enter a number: 2 Enter a number: 3 Enter a number: 5 Enter a number: -1 10
วิธีใช้คำสั่ง Continue Inside for Loop
คำสั่ง continue
สามารถใช้เพื่อข้ามการวนซ้ำบางอย่างได้ ขึ้นอยู่กับเงื่อนไขเฉพาะ
ลองใช้ตัวอย่างเดียวกันในส่วนก่อนหน้า
- อ่านในอินพุตของผู้ใช้และคำนวณผลรวมของตัวเลขที่ไม่เป็นลบ
- หากผู้ใช้ป้อนจำนวนลบ ให้ ข้าม การวนซ้ำนั้นไปยังการ วนซ้ำถัดไป และอ่านในตัวเลขถัดไป
k = 5 sum = 0 for i in range(k): num = int(input("\nEnter a number: ")) if num<0: continue sum += num print(sum)
นี่คือผลลัพธ์ตัวอย่าง
Enter a number: 2 Enter a number: 3 Enter a number: 5 Enter a number: -1 Enter a number: 3 13
ตัวเลขที่สี่คือ -1 ซึ่งเป็นค่าลบ อย่างไรก็ตาม คราวนี้ for loop จะดำเนินต่อไปจนกว่าเราจะถึงจำนวนอินพุตที่ระบุ และละเว้นอินพุตเชิงลบ โดยพื้นฐานแล้วมันจะส่งกลับผลรวมของตัวเลขที่ไม่เป็นลบทั้งหมดจากตัวเลขอินพุต k
คุณสามารถเรียกใช้ Infinite for Loop ใน Python ได้หรือไม่?

ในตัวอย่างและกรณีการใช้งานทั้งหมดที่เราได้พูดคุยกันจนถึงตอนนี้ เราไม่เคยพบปัญหาของ infinite for loop แต่เราสามารถมี infinite for loop ใน Python ได้หรือไม่?
พิจารณาฟังก์ชัน double()
ต่อไปนี้
def double(x = 1): return x*2
- เมื่อคุณเรียกใช้ฟังก์ชัน
double()
โดยไม่ระบุค่าของx
ค่าดีฟอลต์คือ 1 จะถูกใช้ - เมื่อคุณระบุค่าสำหรับ
x
ในการเรียกใช้ฟังก์ชัน ค่านั้นจะถูกใช้
double() # Returns: 2 double(20) # Returns: 40
ใน Python ฟังก์ชัน iter() จะส่งกลับวัตถุ iterator คุณสามารถใช้ next(iter-obj)
เพื่อวนซ้ำตามลำดับและเข้าถึงรายการที่ตามมา
– พิจารณา callable-object และค่า, Sentinel .
–
iter(callable-object, sentinel)
สามารถใช้ทำซ้ำได้จนกว่าค่าที่ส่งคืนจากcallable-object
จะเท่ากับsentinel
คุณเห็นไหมว่าทำไมเราถึงมี infinite for loop ได้ในกรณีนี้?

คุณมี callable-object
เรียกได้และค่า sentinel
หากค่าที่ส่งคืนจาก callable ไม่เท่ากับ Sentinel การวนซ้ำจะดำเนินต่อไปตลอดไป!
ลองใช้ฟังก์ชันด้านบนเป็น double
เท่าของ callable และตั้งค่า Sentinel เป็น 0
หมายเหตุ : กล่าวถึงชื่อของฟังก์ชัน double
ไม่ใช่การเรียกฟังก์ชัน double()
เนื่องจากค่าที่ส่งคืนจากฟังก์ชัน double
จะเป็น 2 เสมอ และไม่เคยเท่ากับ 0 เราจึงมีลูปอนันต์!
️ ลองเรียกใช้เซลล์รหัสต่อไปนี้ มันไม่มีที่สิ้นสุดสำหรับการวนซ้ำ และคุณจะต้องบังคับหยุดโปรแกรม
for _ in iter(double,0): print("Running...")

Python For Loops: คำถามฝึกหัด
#1 . ใช้สำหรับวนซ้ำเพื่อพิมพ์ตัวเลขคู่ทั้งหมดในช่วง 0 ถึง 20
คำแนะนำ : ใช้ฟังก์ชัน range()
กับค่า step
ที่ถูกต้อง
#2 . พิมพ์เลขคู่ทั้งหมดตั้งแต่ 20 ถึง 0
คำแนะนำ : ใช้ค่าลบสำหรับพารามิเตอร์ step
ในฟังก์ชัน range()
#3 . สร้างอาร์เรย์ NumPy สามมิติ
คำแนะนำ : ใช้สำหรับวนซ้ำและซ้อนสำหรับลูปตามความจำเป็นเพื่อเข้าถึงแถวและรายการแต่ละรายการในอาร์เรย์
ห่อ
นี่คือบทสรุปของสิ่งที่คุณได้เรียนรู้ในบทช่วยสอนนี้
- ไวยากรณ์การใช้ Python for loop พร้อมกับ range() และ enumerate() functions
- ใช้สำหรับลูปเพื่อวนซ้ำรายการ อาร์เรย์ และสตริง และอ่านในอาร์กิวเมนต์บรรทัดคำสั่ง
- การใช้คำสั่งควบคุมลูป: แบ่ง เพื่อแยกออกจากลูปและ ดำเนิน การคำสั่งต่อเพื่อข้ามการวนซ้ำบางอย่าง - ตามเงื่อนไข - ภายในสำหรับลูป
- ทำความเข้าใจความเป็นไปได้ของลูปอนันต์ใน Python
ต่อไป เรียนรู้วิธีการใช้ split() วิธีการใน Python