目次

1. บทนำ

การวนซ้ำใน Python เป็นองค์ประกอบสำคัญสำหรับการเพิ่มประสิทธิภาพและความอ่านง่ายของโปรแกรม ภาษาโปรแกรมส่วนใหญ่มีโครงสร้างลูปที่เรียกว่า foreach ซึ่งทำให้การวนซ้ำแต่ละองค์ประกอบของลำดับเป็นเรื่องง่าย แต่ Python ไม่มีลูป foreach โดยตรง ดังนั้น Python จึงใช้คุณลักษณะต่าง ๆ เช่น ลูป for , enumerate และ zip เพื่อให้ได้การประมวลผลที่คล้ายคลึงกัน บทความนี้อธิบายวิธีการทำการวนซ้ำใน Python ที่สอดคล้องกับ foreach จากมุมมองที่ง่ายและใช้งานได้จริง

ทำไม Python ถึงไม่มี foreach?

Python ไม่ได้นำ foreach มาใช้โดยตรงเพราะการออกแบบภาษามุ่งเน้นที่ความเรียบง่ายและความยืดหยุ่น ลูป for และ comprehensions ถูกออกแบบให้ทำงานหลาย ๆ งานที่ต้องวนซ้ำได้อย่างง่ายดาย Python มีคุณลักษณะที่แข็งแกร่งสำหรับการวนซ้ำตามดัชนีและหลายลำดับพร้อมกัน ดังนั้นแม้ไม่มี foreach ก็สามารถเขียนนิพจน์ที่คล้ายคลึงกันได้

ประโยชน์ของการวนซ้ำใน Python

การวนซ้ำใน Python มีข้อได้เปรียบดังต่อไปนี้

  • ความกระชับ : สามารถเขียนโค้ดได้กระชับกว่าภาษาอื่น ๆ ทำให้อ่านง่ายขึ้น
  • ความยืดหยุ่น : สามารถวนซ้ำอย่างสม่ำเสม้าข้ามหลายลำดับและโครงสร้างข้อมูลที่แตกต่างกัน
  • Comprehensions : สามารถสร้างรายการ, พจนานุกรม และคอลเลกชันอื่น ๆ ได้อย่างง่ายดาย ทำให้เขียนโค้ดที่มีประสิทธิภาพเป็นเรื่องง่าย

ในบทต่อไป เราจะดูรายละเอียดการใช้งานพื้นฐานของลูป for ซึ่งเป็นส่วนสำคัญของการวนซ้ำใน Python

2. พื้นฐานของลูป for ใน Python

ลูป for ซึ่งเป็นคุณลักษณะการวนซ้ำหลักใน Python ถูกใช้บ่อยเพื่อประมวลผลแต่ละองค์ประกอบของลำดับ ที่นี่เราจะอธิบายการใช้งานพื้นฐานของลูป for สำหรับลำดับเช่น รายการและทูเพิลอย่างละเอียด

ไวยากรณ์พื้นฐานลูป for ของ Python เขียนด้วยไวยากรณ์ต่อไปนี้

for element in sequence:
    process
  • Element : ตัวแปรที่รับแต่ละรายการของลำดับตามลำดับในแต่ละรอบการวนซ้ำ
  • Sequence : โครงสร้างข้อมูลที่สามารถวนซ้ำได้ เช่น รายการ, ทูเพิล หรือสตริง

ตัวอย่างที่ 1: การวนซ้ำรายการ

ก่อนอื่นมาดูตัวอย่างลูป for พื้นฐานที่ใช้กับรายการ

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

ในโค้ดข้างต้น แต่ละองค์ประกอบของรายการ fruits จะถูกกำหนดให้กับตัวแปร fruit ตามลำดับ และทำการ print(fruit) ผลลัพธ์ที่ได้คือ

apple
banana
cherry

ตัวอย่างที่ 2: การวนซ้ำสตริง

สตริงก็เป็นลำดับเช่นกัน ดังนั้นจึงสามารถวนซ้ำแต่ละอักขระได้

text = "hello"
for char in text:
    print(char)

ในโค้ดนี้ แต่ละอักขระของสตริง text จะถูกกำหนดให้กับตัวแปร char ตามลำดับและพิมพ์ออกมา ผลลัพธ์เป็นดังนี้

h
e
l
l
o

ตัวอย่างที่ 3: การวนซ้ำช่วงที่กำหนด (ฟังก์ชัน range)

หากต้องการวนซ้ำช่วงตัวเลขที่กำด ให้ใช้ฟังก์ชัน range()

for i in range(5):
    print(i)

โค้ดนี้จะกำหนดค่าตั้งแต่ 0 ถึง 4 ให้กับตัวแปร i ตามลำดับและพิมพ์ค่าเหล่านั้น

0
1
2
3
4

วิธีใช้ฟังก์ชัน range

  • range(n) : สร้างตัวเลขตั้งแต่ 0 ถึง n-1
  • range(start, stop) : สร้างตัวเลขตั้งแต่ start ถึง stop-1
  • range(start, stop, step) : สร้างตัวเลขตั้งแต่ start ถึง stop-1 โดยก้าว step

ตัวอย่างการใช้งานจริงของลูป for

การคำนวณผลรวมของอาเรย์

นี่คือตัวอย่างการใช้ลูป for เพื่อคำนวณผลรวมของตัวเลขในรายการ

numbers = [1, 2, 3, 4, 5]
total = 0
for number in numbers:
    total += number
print("Total:", total)

ในโค้ดนี้ ตัวเลขในรายการจะถูกบวกเข้ากับตัวแปร total ตามลำดับ และผลรวมสุดท้ายจะถูกพิมพ์ออกมา

การประมวลผลเงื่อนไขขององค์ประกอบ

คุณสามารถกำหนดเงื่อนไขภายในลูป for เพื่อประมวลผลองค์ประกอบตามเงื่อนไขที่กำหนดได้

numbers = [1, 2, 3, 4, 5, 6]
for number in numbers:
    if number % 2 == 0:
        print(number, "is even")
    else:
        print(number, "is odd")

โค้ดนี้กำหนดว่าตัวเลขแต่ละตัวเป็นเลขคู่หรือเลขคี่และพิมพ์ผลลัพธ์ออกมา

ลูป for ซ้อน (โครงสร้างซ้อน)

for ลูปสามารถซ้อนกันได้ ซึ่งมีประโยชน์เมื่อประมวลผลหลายรายการหรือรายการสองมิติ

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for row in matrix:
    for item in row:
        print(item, end=" ")
    print()  # newline

โค้ดนี้แสดงทุกองค์ประกอบของรายการสองมิติ (รายการของรายการ)

1 2 3
4 5 6
7 8 9

สรุป

ลูป for ของ Python เป็นโครงสร้างพื้นฐานสำหรับการวนซ้ำอย่างมีประสิทธิภาพบนลำดับต่าง ๆ เช่น รายการ, ทูเพิล และสตริง โดยการผสมผสานฟังก์ชัน range() กับเงื่อนไขและการซ้อนลูป คุณสามารถดำเนินกระบวนการต่าง ๆ ได้อย่างง่ายดาย การเข้าใจโครงสร้างพื้นฐานนี้ทำให้คุณสามารถทำการวนซ้ำอย่างยืดหยเทียบเท่ากับ foreach

3. การใช้ฟังก์ช enumerate

เมื่อวนซ้ำบนลำดับใน Python บางครั้งคุณต้องการรับทั้งดัชนีของรายการและองค์ประกอบพร้อมกัน ในกรณีเช่นนี้ การใช้ฟังก์ชัน enumerate ช่วยให้คุณดึงดัชนีและองค์ประกอบได้อย่างมีประสิทธิภาพขณะวนลูป ที่นี่เราจะอธิบายรายละเอียดการใช้งานพื้นฐานและตัวอย่างการใช้งานจริงของฟังก์ชัน enumerate

ไวยากรณ์พื้นฐานของฟังก์ชัน enumerate

โดยใช้ฟังก์ชัน enumerate แต่ละองค์ประกอบในลำดับจะถูกกำหนดดัชนี ทำให้เกิดคู่ของดัชนีและองค์ประกอบ ใช้ตามไวยากรณ์ต่อไปนี้

for index, element in enumerate(sequence):
    process
  • Index : หมายเลขดัชนีที่สอดคล้องกับแต่ละองค์ประกอบในลำดับ.
  • Element : แต่ละองค์ประกอบในลำดับ.
  • Sequence : โครงสร้างข้อมูลที่สามารถวนซ้ำได้ เช่น รายการ, ทูเพิล หรือสตริง.

ตัวอย่างที่ 1: การรับดัชนีและองค์ประกอบของรายการพร้อมกัน

ตัวอย่างที่ประมวลผลรายการโดยรับดัชนีและองค์ประกอบพร้อมกันโดยใช้ enumerate

fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

โค้ดนี้แสดงแต่ละองค์ประกอบในรายการ fruits พร้อมกับดัชนีของมัน

0: apple
1: banana
2: cherry

ตัวอย่างที่ 2: การระบุดัชนีเริ่มต้น

ฟังก์ชัน enumerate มีตัวเลือกให้ระบุดัชนีเริ่มต้น โดยค่าเริ่มต้นดัชนีเริ่มที่ 0 แต่คุณสามารถตั้งค่าใด ๆ เป็นดัชนีเริ่มต้นได้

fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, start=1):
    print(f"{index}: {fruit}")

ค้ดนี้แสดงดัชนีที่เริ่มจาก 1

1: apple
2: banana
3: cherry

ตัวอย่างการใช้งานจริงของฟังก์ชัน enumerate

การแสดงความคืบหน้าของรายการงาน

ฟังก์ชัน enumerate ยังมีประโยชน์เมื่อดัชนีเป็นสิ่งที่ช่วยได้ เช่นในการจัดการงาน ตัวอย่างด้านล่างแสดงความคืบหน้าของแต่ละงานในรูปแบบรายการ

tasks = ["Laundry", "Cleaning", "Cooking"]
for index, task in enumerate(tasks, start=1):
    print(f"Task{index}: {task} - Completed")

โค้ดนี้แสดงแต่ละงานในรายการงานพร้อมหมายเลข

Task1: Laundry - Completed
Task2: Cleaning - Completed
Task3: Cooking - Completed

การประมวลผลตามเงื่อนไขเฉพาะภายในอาเรย์

เมื่อคุณต้องการประมวลผลองค์ประกอบที่ตำแหน่งเฉพาะในอาเรย์โดยใช้ดัชนีของพวกมัน enumerate ก็สะดวกเช่นกัน

numbers = [10, 20, 30, 40, 50]
for index, number in enumerate(numbers):
    if index % 2 == 0:
        print(f"Element {number} at index {index} has an even index")

โค้ดนี้แสดงองค์ประกอบที่อยู่ที่ดัชนีคู่

Element 10 at index 0 has an even index
Element 30 at index 2 has an even index
Element 50 at index 4 has an even index

สรุป

enumerate เป็นฟังก์ชันที่มีประโยชน์อย่างยิ่งสำหรับการรับดัชนีและองค์ประกอบพร้อมกัน เนื่องจากคุณสามารถกำหนดดัชนีเริ่มต้นได้ จึงเหมาะสำหรับการจัดลำดับรายการและการประมวลผลตามเงื่อนไขเฉพาะ โดยเฉพาะอย่างยิ่งทำให้การติดตามแต่ละองค์ประกอบในรายการง่ายขึ้น ช่วยเพิ่มความอ่านง่ายและการบำรุงรักษาของโค้ด

4. การวนซ้ำพร้อมกันของหลายลำดับด้วยฟังก์ชัน zip

โดยใช้ฟังก์ชัน zip ของ Python คุณสามารถวนซ้ำหลายลำดับพร้อมกันได้ ฟีเจอร์นี้มีประโยชน์มากเมื่อคุณต้องการประมวลผลรายการ, ทูเพิล หรือลำดับอื่น ๆ อย่างขนาน ที่นี่เราจะนำเสนอการใช้งานพื้นฐานและตัวอย่างการใช้งานจริงของฟังก์ชัน zip

ไวยากรณ์พื้นฐานของฟังก์ชัน “

ฟังก์ชัน zip รับลำดับหลาย ๆ ตัวเป็นอาร์กิวเมนต์, จัดกลุ่มองค์ประกอบของพวกมันเป็นทูเพิล, และสร้างอ็อบเจ็กต์ที่สามารถวนซ้ำได้ ใช้ฟังก์ชัน zip ตามไวยากรณ์ต่อไปนี้

for element1, element2, ... in zip(sequence1, sequence2, ...):
    process
  • element1, element2… : องค์ประกอบหนึ่งจากแต่ละลำดับจะถูกรวมเป็นทูเพิลและกำหนดให้กับตัวแปรตามลำดับ
  • sequence1, sequence2… : ระบุลำดับที่คุณต้องการประมวลผลร่วมกัน เช่น รายการหรือทูเพิล

ตัวอย่างที่ 1: การวนซ้ำสองรายการพร้อมกัน

ตัวอย่างนี้วนซ้ำสองรายการพร้อมกันโดยใช้ฟังก์ชัน zip และพิมพ์องค์ประกอบที่รวมกันจากแต่ละรายการ

names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
    print(f"{name}'s score is {score}")

โค้ดนี้วนซ้ำรายการ names และรายการ scores พร้อมกัน, แสดงชื่อและคะแนน

Alice's score is 85
Bob's score is 92
Charlie's score is 78

ตัวอย่างที่ 2: การวนซ้ำสามรายการหรือมากกว่าพร้อมกัน

ฟังก์ชัน zip ยังรองรับการทำงานกับสามลำดับหรือมากกว่าด้วย, ทำให้คุณสามารถประมวลผลหลายรายการหรือทูเพิลพร้อมกันได้

names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
grades = ["B", "A", "C"]
for name, score, grade in zip(names, scores, grades):
    print(f"{name}'s score is {score}, and the grade is {grade}")

โค้ดนี้แสดงชื่อ, คะแนน, และเกรดพร้อมกัน

Alice's score is 85, and the grade is B
Bob's score is 92, and the grade is A
Charlie's score is 78, and the grade is C

พฤติกรรมของฟังก์ชัน zip เมื่อแต่ละลำดับมีความยาวต่างกัน

เมื่อใช้ฟังก์ชัน zip หากลำดับมีความยาวต่างกัน การวนซ้ำจะหยุดที่ความยาวของลำดับที่สั้นที่สุด มาตรวจสอบในตัวอย่างด้านล่าง

names = ["Alice", "Bob"]
scores = [85, 92, 78]  # 3 elements
for name, score in zip(names, scores):
    print(f"{name}'s score is {score}")

ในกรณีนี้ เนื่องจาก names มีเพียงสององค์ประกอบ องค์ประกอบที่สามจะถูกละเว้นและผลลัพธ์จะเป็นดังนี้

Alice's score is 85
Bob's score is 92

ตัวอย่างการใช้งานจริงของฟังก์ชัน zip

แสดงองค์ประกอบของรายการเป็นคู่

โดยใช้ฟังก์ชัน zipยังสามารถจับคู่องค์ประกอบที่อยู่ติดกันในรายการเดียวเพื่อประมวลผลได้

data = [10, 20, 30, 40]
for x, y in zip(data, data[1:]):
    print(f"Pair: ({x}, {y})")

โค้ดนี้จับคู่องค์ประกอบที่ติดกันและพิมพ์ออกมา

Pair: (10, 20)
Pair: (20, 30)
Pair: (30, 40)

สรุป

ฟังก์ชัน zip เป็นเครื่องมือที่ทรงพลังสำหรับการวนซ้ำหลายลำดับพร้อมกัน ช่วยในงานเช่นการจับคู่หรือการรวมข้อมูลต่าง ๆ และทำให้คุณเขียนโค้ดได้กระชับ เมื่อทำงานกับลำดับที่มีความยาวต่างกัน การใช้ zip_longest ตามความต้องการจะทำให้การวนซ้ำมีความยืดหยุ่นมากขึ้น

5. List Comprehensions (List Comprehension)

Python มีเทคนิคที่ทรงพลังเรียกว่า “list comprehension” สำหรับสร้างลำดับอย่างง่าย ๆ โดยใช้ list comprehension การสร้างรายการด้วยลูป for แบบดั้งเดิมจะสั้นและอ่านง่ายยิ่งขึ้น บทนี้อธิบายการใช้งานพื้นฐานของ list comprehension พร้อมตัวอย่างโค้ดจริง เพื่อแสดงให้เห็นถึงความสะดวกสบายของมัน

พื้นฐานไากรณ์ของ List Comprehensions

List comprehensions ถูกเขียนโดยใช้ไวยากรณ์ต่อไปนี้.

[expression for element in sequence]
  • Expression : การดำเนินการที่ใช้กับแต่ละองค์ประกอบ.
  • Element : ตัวแปรที่รับแต่ละรายการจากลำดับตามลำดับ.
  • Sequence : โครงสร้างข้อมูลที่สามารถวนซ้ำได้ เช่น รายการ (list), ทูเพิล (tuple) หรือสตริง (string).

ตัวอย่างที่ 1: List Comprehension พื้นฐาน

เช่น หากต้องการสร้างรายการใหม่โดยการคูณสองเท่าของแต่ละองค์ประกอบในรายการหนึ่ง โดยใช้ลูป for แบบดั้งเดิม จะเขียนดังนี้.

numbers = [1, 2, 3, 4, 5]
doubled = []
for number in numbers:
    doubled.append(number * 2)
print(doubled)

โดยใช้ list comprehension โค้ดข้างต้นสามารถเขียนให้กระชับได้ดังนี้.

numbers = [1, 2, 3, 4, 5]
doubled = [number * 2 for number in numbers]
print(doubled)

ผลลัพธ์จะเป็นดังนี้.

[2, 4, 6, 8, 10]

List Comเงื่อนไข

ใน list comprehensions คุณสามารถเพิ่มเงื่อนไขเพื่อประมวลผลเฉพาะองค์ประกอบที่ต้องการได้ เงื่อนไขจะเขียนเป็น for ตามด้วย if.

ตัวอย่างที่ 2: List Comprehension แบบมีเงื่อนไข

เช่น หากต้องการคูณสองเท่าเฉพาะเลขคู่ในรายการ คุณจะเขียนว่า:

numbers = [1, 2, 3, 4, 5]
doubled_even = [number * 2 for number in numbers if number % 2 == 0]
print(doubled_even)

โค้ดนี้จะดึงเฉพาะเลขคู่และสร้างรายการใหม่ที่มีค่าเป็นสองเท่า

[4, 8]

ตัวอย่างที่ 3: List Comprehension แบบมีเงื่อนไขโดยใช้ else

หากคุณต้องการประมวลผลต่างกันสำหรับแต่ละองค์ประกอบโดยใช้การแยกเงื่อนไข คุณสามารถเพิ่ม else ก่อน if.

numbers = [1, 2, 3, 4, 5]
result = [number * 2 if number % 2 == 0 else number for number in numbers]
print(result)

โค้ดนี้จะคูณสองเท่าเมื่อเป็นเลขคู่ และในกรณีอื่นจะเพิ่มค่าต้นฉบับลงในรายการ

[1, 4, 3, 8, 5]

สรุป

โดยการใช้ list comprehensions คุณสามารถสร้างรายการได้อย่างกระชับและมีประสิทธิภาพมากกว่าการใช้ลูป for การผสมผสานการประมวลผลแบบเงื่อนไขง่าย ๆ กับการดำเนินการเฉพาะทำให้คุณเขียนโค้ดที่เป็น Pythonic มากขึ้น อย่างไรก็ตาม list comprehensions ที่ซับซ้อนอาจทำให้ความอ่านยากลง ดังนั้นจึงควรใช้ในสถานการณ์ที่เหมาะสม

6. การวนบน Dictionary

Dictionary (dict) เป็นหนึ่งในโครงสร้างข้อมูลหลักของ Python ที่ใช้เก็บคู่คีย์‑ค่า เช่นเดียวกับ list และ tuple, dictionary สามารถวนซ้ำได้ แต่โดยทั่วไปคุณมักจะดึงคีย์, ค่า หรือทั้งสองอย่างพร้อมกัน บทนี้จะอธิบายวิธีการวนซ้ำบน dictionary และฟังก์ชันที่เป็นประโยชน์อย่างละเอียด.

การวนซ้ำบน Dictionary พื้นฐาน

ในการวนซ้ำบน dictionary พื้นฐาน คุณใช้ลูป for เพื่อดึงคีย์, ค่า หรือคู่คีย์‑ค่า

ตัวอย่างที่ 1: วนซ้ำเฉพาะคีย์

เมื่อคุณวนซ้ำบน dictionary ด้วยลูป for มันจะให้คีย์เท่านั้นโดยค่าเริ่มต้น.

person = {"name": "Taro", "age": 30, "occupation": "Engineer"}
for key in person:
    print(key)

โค้ดนี้จะแสดงคีย์ทั้งหมดของ dictionary ตามลำดับ.

name
age
occupation

ตัวอย่างที่ 2: วนซ้ำเฉพาะค่า

เพื่อวนซ้ำค่าของ dictionary ให้ใช้เมธอด values().

person = {"name": "Taro", "age": 30, "occupation": "Engineer"}
for value in person.values():
    print(value)

โค้ดนี้จะแสดงค่าทั้งหมดของ dictionary ตามลำดับ.

Taro
30
Engineer

ตัวอย่างที่ 3: วนซ้ำคู่คีย์‑ค่า

หากต้องการดึงคีย์และค่าพร้อมกัน ให้ใช้เมธอด items() ซึ่งจะคืนค่าคู่แต่ละคู่เป็นทูเพิลที่สามารถแยกเป็นสองตัวแปรได้.

person = {"name": "Taro", "age": 30, "occupation": "Engineer"}
for key, value in person.items():
    print(f"{key}: {value}")

โค้ดนี้จะแสดงคู่คีย์‑ค่าทั้งหมด.

name: Taro
age: 30
occupation: Engineer

การวนซ้ำบนเงื่อนไข

หากต้องการดึงเฉพาะคู่ที่ตรงตามเงื่อนไขเฉพาะใน dictionary คุณสามารถระบุเงื่อนไขด้วยคำสั่ง if.

ตัวอย่างที่ 4: แสดงเฉพาะคู่ที่มีค่าตรงตามเงื่อนไข

เช่น หากต้องการแสดงเฉพาะรายการที่อายุเท่ากับ 30 ปีขึ้นไป คุณจะเขียนว่า:

%%CODEBLOCK14%%

people = {"Taro": 30, "Hanako": 25, "Jiro": 35}
for name, age in people.items():
    if age >= 30:
        print(f"{name} is at least 30 years old")

โค้ดนี้จะแสดงเฉพาะคู่ที่ตรงตามเงื่อนไข

Taro is at least 30 years old
Jiro is at least 30 years old

การสร้างดิกชันนารีด้วย Comprehension

คล้ายกับ list comprehensions การสร้างดิกชันนารีด้วย comprehension ก็เป็นไปได้เช่นกัน พวกมันช่วยให้คุณสร้างดิกชันนารีใหม่โดยอิงตามเงื่อนไข

ตัวอย่าง 5: สร้างดิกชันนารีใหม่ด้วยเงื่อนไข

ตัวอย่างเช่น เพื่อสร้างดิกชันนารีใหม่ที่รวมเฉพาะบุคคลที่มีอายุ 30 ปีขึ้นไป คุณสามารถเขียน:

people = {"Taro": 30, "Hanako": 25, "Jiro": 35}
adults = {name: age for name, age in people.items() if age >= 30}
print(adults)

ผลลัพธ์ของโค้ดนี้มีดังนี้

{'Taro': 30, 'Jiro': 35}

สรุป

ใน Python คุณสามารถวนลูปผ่านดิกชันนารีโดยการดึงคีย์ ค่า หรือคู่คีย์-ค่าออกมา นอกจากนี้ การสร้างดิกชันนารีด้วย comprehension แบบมีเงื่อนไขและการจัดการดิกชันนารีแบบซ้อนกันช่วยให้การประมวลผลข้อมูลมีความยืดหยุ่น ดิกชันนารีเป็นโครงสร้างข้อมูลที่สะดวกมากสำหรับการจัดระเบียบและจัดการข้อมูลที่ซับซ้อน และการใช้เทคนิคการวนลูปที่เหมาะสมจะช่วยเพิ่มประสิทธิภาพในการใช้งาน

7. การวนลูปผ่านเซ็ต

เซ็ต (set) เป็นโครงสร้างข้อมูลที่เก็บองค์ประกอบที่ไม่ซ้ำกัน มีประโยชน์สำหรับการตรวจสอบว่ามีองค์ประกอบเฉพาะเจาะจงหรือไม่ หรือสำหรับการลบข้อมูลซ้ำจากรายการ เนื่องจากเซ็ตของ Python ไม่มีลำดับ ดังนั้นจึงไม่สามารถเข้าถึงองค์ประกอบด้วยดัชนีเหมือนกับรายการหรือทูเพิล แต่คุณสามารถวนลูปผ่านองค์ประกอบทั้งหมดโดยใช้ลูป for ในบทนี้ เราจะกล่าวถึงพื้นฐานของการวนลูปผ่านเซ็ต การวนลูปแบบมีเงื่อนไข และวิธีการวนลูปที่เกี่ยวข้องกับการดำเนินการเฉพาะของเซ็ต

การวนลูปเซ็ตพื้นฐาน

เพื่อประมวลผลองค์ประกอบทุกตัวในเซ็ต ให้ใช้ลูป for เนื่องจากเซ็ตไม่มีลำดับ การเรียงลำดับของการประมวลผลอาจแตกต่างกันในแต่ละครั้ง

ตัวอย่าง 1: พิมพ์องค์ประกอบทั้งหมดของเซ็ต

ก่อนอื่น มาดูตัวอย่างการวนลูปพื้นฐานที่พิมพ์องค์ประกอบทุกตัวในเซ็ต

fruits = {"apple", "banana", "cherry"}
for fruit in fruits:
    print(fruit)

ลำดับผลลัพธ์ไม่มีการรับประกัน แต่แต่ละองค์ประกอบจะปรากฏเพียงครั้งเดียว

banana
cherry
apple

การวนลูปเซ็ตแบบมีเงื่อนไข

คุณยังสามารถประมวลผลองค์ประกอบของเซ็ตที่ตรงตามเงื่อนไขเฉพาะได้ ใช้คำสั่ง if เพื่อกรองตามเงื่อนไข

ตัวอย่าง 2: พิมพ์เฉพาะองค์ประกอบที่ตรงตามเงื่อนไข

ตัวอย่างเช่น เพื่อแสดงเฉพาะสตริงในเซ็ตที่มีความยาวอย่างน้อยห้าตัวอักษร คุณจะเขียน:

fruits = {"apple", "banana", "cherry", "fig", "kiwi"}
for fruit in fruits:
    if len(fruit) >= 5:
        print(fruit)

โค้ดนี้พิมพ์ชื่อผลไม้ที่มีตัวอักษรห้าตัวหรือมากกว่า

banana
cherry
apple

การสร้างเซ็ตด้วย Comprehension

คล้ายกับ list comprehensions การสร้างเซ็ตด้วย comprehension ก็มีให้ใช้งาน การใช้ set comprehension ช่วยให้คุณสร้างเซ็ตใหม่ได้อย่างกระชับโดยอิงตามเงื่อนไข

ตัวอย่าง 3: สร้างเซ็ตใหม่ด้วยเงื่อนไข

ตัวอย่างเช่น เพื่อสร้างเซ็ตใหม่ที่ประกอบด้วยองค์ประกอบที่มีตัวอักษรห้าตัวหรือมากกว่า ตามตัวอย่างก่อนหน้า คุณสามารถเขียน:

fruits = {"apple", "banana", "cherry", "fig", "kiwi"}
long_fruits = {fruit for fruit in fruits if len(fruit) >= 5}
print(long_fruits)

ผลลัพธ์จะมีลักษณะดังนี้ (ลำดับไม่มีการรับประกัน)

{'banana', 'cherry', 'apple'}

สรุป

เซ็ตเป็นโครงสร้างข้อมูลที่ไม่อนุญาตให้มีข้อมูลซ้ำและไม่มีลำดับ ทำให้มีลักษณะที่แตกต่างจากรายการหรือทูเพิล พวกมันเหมาะอย่างยิ่งสำหรับการจัดการข้อมูลที่ไม่ซ้ำกันและสำหรับการดำเนินการกับเซ็ตอื่นเพื่อหาการตัดกันหรือความแตกต่าง นอกจากนี้ การใช้ set comprehensions ช่วยให้การประมวลผลข้อมูลกระชับและมีประสิทธิภาพ

8. การใช้โมดูล itertools

itertools โมดูลเป็นชุดเครื่องมือที่สะดวกรวมอยู่ในไลบรารีมาตรฐานของ Python เพื่อช่วยในการทำซ้ำ (iteration) มันให้ฟังก์ชันหลายอย่างสำหรับการจัดการโครงสร้างข้อมูลที่เป็น iterable อย่างมีประสิทธิภาพ ซึ่งเป็นประโยชน์อย่างยิ่งเมื่อทำงานกับข้อมูลจำนวนมาก ในบทนี้ เราจะอธิบายฟังก์ชันหลักของโมดูล itertools และวิธีการใช้งาน

ฟังก์ชันสำคัญของโมดูล itertools

โมดูล itertools มีฟังก์ชันหลากหลายเพื่อเพิ่มประสิทธิภาพการทำซ้ำ ที่นี่เราจะแนะนำฟังก์ชันที่เป็นตัวแทนและอธิบายวิธีใช้พร้อมตัวอย่างที่เป็นรูปธรรม

1. ฟังก์ชัน count

ฟังก์ชัน count เป็น iterator ที่สร้างตัวเลขที่เพิ่มขึ้นอย่างไม่มีที่สิ้นสุดจากค่าที่กำหนดเริ่มต้น มักใช้สำหรับสร้างลำดับเลขเมื่อไม่มีการกำหนดขอบบน

from itertools import count

for i in count(10):
    if i > 15:
        break
    print(i)

โค้ดนี้เริ่มที่ 10 และแสดงจำนวนเต็มที่น้อยกว่า 16

10
11
12
13
14
15

2. ฟังก์ชัน cycle

ฟังก์ชัน cycle สร้าง iterator ที่ทำซ้ำลำดับที่กำหนดอย่างไม่มีที่สิ้นสุด มีประโยชน์เมื่อคุณต้องการแสดงรูปแบบเฉพาะซ้ำ ๆ

from itertools import cycle

count = 0
for item in cycle(["A", "B", "C"]):
    if count == 6:
        break
    print(item)
    count += 1

โค้ดนี้ทำซ้ำ “A”, “B”, “C” และแสดงผลทั้งหมด 6 ครั้ง

A
B
C
A
B
C

3. ฟังก์ชัน repeat

ฟังก์ชัน repeat สร้าง iterator ที่ทำซ้ำองค์ประกอบที่ระบุอย่างไม่มีที่สิ้นสุด คุณยังสามารถกำหนดจำนวนครั้งที่ทำซ้ำด้วยอกิวเมนต์ที่สองได้

from itertools import repeat

for item in repeat("Python", 3):
    print(item)

โค้ดนี้แสดง “Python” สามครั้ง

Python
Python
Python

4. ฟังก์ชัน accumulate

ฟังก์ชัน accumulate สร้าง iterator ที่คำนวณผลรวมสะสมของลำดับที่ให้ ตัวอย่างเช่น มันมีประโยชน์สำหรับการบวกสมาชิกของรายการอย่างต่อเนื่อง โดยใช้ฟังก์ชันที่กำหนดเอง คุณยังสามารถทำการคำนวณอื่น ๆ เช่น ผลูณหรือค่ามากสุดได้

from itertools import accumulate

numbers = [1, 2, 3, 4, 5]
result = list(accumulate(numbers))
print(result)

โค้ดนี้คำนวณผลรวมสะสมของรายการและแสดงผลต่อไปนี้

[1, 3, 6, 10, 15]

สรุป

โมดูล itertools มีฟังก์ชันมากมายสำหรับการทำซ้ำที่ซับซ้อนอย่างมีประสิทธิภาพ มันเป็นประชน์อย่างยิ่งเมื่อคุณต้องการการทำซ้ำแบบไม่มีที่สิ้นสุดหรือการจัดชุดและการจัดเรียงของข้อมูล ช่วยให้โค้ดกระชับและเร่งความเร็วการประมวลผล ด้วยการจัดการการทำซ้ำอย่างยืดหยุ่น คุณสามารถเขียนโค้ด Python ที่จัดการกับชุดข้อมูลขนาดใหญ่และการดำเนินการที่ซับซ้อนได้อย่างง่ายดาย

9. สรุป

Python มีวิธีการจัดการการทำซ้ำหลายแบบ แต่ละแบบมีลักษณะและการใช้งานของตนเอง ตลอดซีรีส์นี้ เราได้เรียนรู้เทคนิคหลากหลายเพื่อทำให้การทำซ้ำใน Python มีประสิทธิภาพมากขึ้น ในบทนี้ เราจะทบทวนเทคนิคเหล่านั้นเพื่อให้คุณเลือกตัวเลือกที่เหมาะสมกับเป้าหมายของคุณ

จุดสำคัญและการใช้งานของแต่ละวิธี

ด้านล่างเป็นสรุปั้น ๆ ของจุดสำคัญและการใช้งานของแต่ละวิธี

1. for Loop

จุดสำคัญ: ไวยากรณ์การทำซ้ำพื้นฐานใน Python ง่ายและหลากหลาย
การใช้งาน: ใช้เมื่อประมวลผลลำดับเช่น รายการ (list), ทูเพิล (tuple) หรือสตริง (string)

2. ฟังก์ชัน enumerate

จุดสำคัญ: ฟังก์ชันที่ให้ทั้งดัชนีและค่าในเวลาเดียวกัน
การใช้งาน: ทำซ้ำข้อมูลที่ต้องการคำนึงถึงลำดับหรือเมื่อจำเป็นต้องใช้ดัชนี

3. ฟังก์ชัน zip

จุดสำคัญ: อนุญาตให้ทำซ้ำหลายลำดับพร้อมกันได้
การใช้งาน: สะดวกสำหรับการประมวลผลสมาชิกที่สอดคล้องกันของรายการหรือทูเพิลหลายชุด

4. List Comprehension

จุดสำคัญ: วิธีง่ายและมีประสิทธิภาพในการสร้างรายการ สามารถทำการประมวลผลแบบมีเงื่อนไขได้ด้วย
การใช้งาน: สร้างและกรองรายการตามเงื่อนไขหรือนิพจน์

5. การทำซ้ำ Dictionary

จุดสำคัญ: สามารถดึงคีย์, ค่า หรือคู่คีย์-ค่าได้
การใช้งาน: ใช้เมื่อจัดการข้อมูลแบบพจนานุกรมและต้องประมวลผลตามคีย์และค่าต่าง ๆ

6. การทำซ้ำด้วยเซ็ต

จุดเด่น: สามารถประมวลผลข้อมูลที่มีองค์ประกอบไม่ซ้ำกัน (ไม่ซ้ำ) ได้ การใช้งาน: การประมวลผลข้อมูลที่ไม่ซ้ำกันและการดำเนินการกับเซ็ตอื่นๆ

7. โมดูล itertools

จุดเด่น: ช่วยให้ทำการทำซ้ำแบบไม่มีที่สิ้นสุด การรวมลำดับหลายตัว และการสร้างการเรียงสับเปลี่ยนและการรวมกลุ่ม การใช้งาน: สำหรับการทำซ้ำที่ซับซ้อนหรือเมื่อจัดการข้อมูลปริมาณมากอย่างมีประสิทธิภาพ

แนวทางในการเลือกวิธีที่เหมาะสมที่สุด

ในการทำซ้ำ สิ่งสำคัญคือการเลือกวิธีที่เหมาะสมตามเป้าหมายและโครงสร้างข้อมูล ด้านล่างนี้คือแนวทางในการเลือกเทคนิคการทำซ้ำที่เหมาะสมสำหรับแต่ละวัตถุประสงค์

  1. การทำซ้ำรายการหรือทูเพิลแบบง่าย : ลูป for พื้นฐานเป็นวิธีที่ตรงไปตรงมาที่สุดและเรียบง่าย
  2. เมื่อต้องการดัชนี : โดยใช้ enumerate คุณสามารถลูปขณะที่ได้ทั้งดัชนีและองค์ประกอบพร้อมกัน
  3. เมื่อประมวลผลลำดับหลายตัวพร้อมกัน : การใช้ zip ช่วยให้ประมวลผลรายการหรือทูเพิลหลายตัวแบบขนานกันอย่างมีประสิทธิภาพ
  4. การสร้างรายการแบบมีเงื่อนไข : การใช้ list comprehensions ช่วยให้เลือกองค์ประกอบตามเงื่อนไขและเก็บผลลัพธ์ที่คำนวณได้โดยตรงในรายการ
  5. เมื่อต้องการการดำเนินการพิเศษกับพจนานุกรมหรือเซ็ต : โดยใช้เมธอด items() , values() หรือ set comprehensions ที่ออกแบบเฉพาะสำหรับพจนานุกรมและเซ็ต คุณสามารถจัดการคีย์และค่า หรือข้อมูลที่ไม่ซ้ำกันได้อย่างง่ายดาย
  6. เมื่อต้องการการทำซ้ำขั้นสูงหรือการปรับให้เหมาะสม : การใช้โมดูล itertools ช่วยให้ทำการทำซ้ำแบบไม่มีที่สิ้นสุดอย่างมีประสิทธิภาพ การรวมชุดข้อมูลหลายชุด และการสร้างการเรียงสับเปลี่ยนและการรวมกลุ่มพิเศษ

สรุป

Python มีชุดคุณสมบัติที่หลากหลายสำหรับการทำซ้ำอย่างมีประสิทธิภาพและกระชับ โดยใช้เทคนิคหลากหลาย—ตั้งแต่ลูปแบบง่ายไปจนถึงการทำซ้ำขั้นสูงเหนือลำดับหลายตัว—คุณสามารถปรับปรุงความสามารถในการอ่านและประสิทธิภาพของโค้ดได้อย่างมาก การนำวิธีเหล่านี้ไปใช้อย่างเหมาะสมทำให้การเขียนโปรแกรม Python ยืดหยุ่นและทรงพลังยิ่งขึ้น ต่อไปนี้ จงมุ่งมั่นที่จะเชี่ยวชาญแต่ละคุณสมบัติตามความจำเป็นและดำเนินการเขียนโค้ดที่มีประสิทธิภาพต่อไป

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール