0Pricing
Python Academy · บทเรียน

itertools: ตัววนซ้ำแบบไม่สิ้นสุดและมีขอบเขต

ใช้ count, cycle, islice, chain และ zip_longest

itertools: ตัววนซ้ำแบบไม่สิ้นสุดและมีขอบเขต เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

itertools คืออะไร

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

import itertools

# count: infinite counter
for i in itertools.islice(itertools.count(10, 2), 5):
    print(i, end=" ")  # 10 12 14 16 18

count()

count(start, step) สร้างลำดับเลขคณิตที่ไม่มีที่สิ้นสุด ควรใช้คู่กับ islice หรือเงื่อนไขหยุดเสมอ

import itertools

for n in itertools.count(1, 10):
    if n > 40:
        break
    print(n, end=" ")  # 1 11 21 31 41

cycle()

cycle(iterable) ทำให้ตัววนซ้ำวนซ้ำไปเรื่อย ๆ อย่างไม่มีที่สิ้นสุด

import itertools

colors = itertools.cycle(["red","green","blue"])
for _ in range(7):
    print(next(colors), end=" ")
# red green blue red green blue red

repeat()

repeat(value, times) ให้ค่าเดิมซ้ำเป็นจำนวน times ครั้ง หากไม่ระบุ จะทำซ้ำอย่างไม่มีที่สิ้นสุด

import itertools
print(list(itertools.repeat(42, 4)))   # [42, 42, 42, 42]
print(list(map(pow, range(5), itertools.repeat(2))))
# [0, 1, 4, 9, 16]

islice()

islice(it, stop) หรือ islice(it, start, stop, step) ใช้ตัดช่วงตัววนซ้ำโดยไม่แปลงข้อมูลทั้งหมดไว้ในหน่วยความจำ

import itertools

result = list(itertools.islice(range(100), 2, 10, 2))
print(result)  # [2, 4, 6, 8]

chain()

chain(*iterables) เชื่อมตัววนซ้ำหลายตัวต่อกันตั้งแต่ต้นจนจบให้เป็นตัววนซ้ำเดียว

import itertools

result = list(itertools.chain([1,2], [3,4], [5]))
print(result)  # [1, 2, 3, 4, 5]

# chain.from_iterable for a list of iterables:
nested = [[1,2],[3,4]]
print(list(itertools.chain.from_iterable(nested)))

zip_longest()

zip_longest จับคู่ตัววนซ้ำที่มีความยาวไม่เท่ากัน โดยเติมค่าที่ขาดหายด้วย fillvalue

import itertools

a = [1, 2, 3]
b = ["a", "b"]
print(list(itertools.zip_longest(a, b, fillvalue=0)))
# [(1, "a"), (2, "b"), (3, 0)]

dropwhile() และ takewhile()

takewhile(pred, it) ให้สมาชิกตราบใดที่เงื่อนไขตรรกะเป็นจริง ส่วน dropwhile จะทำตรงกันข้าม

import itertools

nums = [1, 3, 5, 6, 7, 9]
print(list(itertools.takewhile(lambda x: x % 2, nums)))
# [1, 3, 5]

print(list(itertools.dropwhile(lambda x: x % 2, nums)))
# [6, 7, 9]

filterfalse()

filterfalse(pred, it) ให้สมาชิกที่เงื่อนไขตรรกะเป็นเท็จ ซึ่งเป็นส่วนเติมเต็มของ filter()

import itertools

evens = list(itertools.filterfalse(lambda x: x%2, range(10)))
print(evens)  # [0, 2, 4, 6, 8]

starmap()

starmap(func, iterable) ใช้ฟังก์ชันกับทูเพิลอาร์กิวเมนต์แต่ละชุดจากตัววนซ้ำ

import itertools, operator

pairs = [(2,3),(4,5),(1,10)]
result = list(itertools.starmap(operator.mul, pairs))
print(result)  # [6, 20, 10]

groupby()

groupby(it, key) จัดกลุ่มสมาชิกที่อยู่ติดกันและมีค่าคีย์เดียวกัน ควรเรียงลำดับตัววนซ้ำก่อนเพื่อให้จัดกลุ่มได้ถูกต้อง

import itertools

data = sorted([("a",1),("b",2),("a",3)], key=lambda x:x[0])
for key, group in itertools.groupby(data, key=lambda x:x[0]):
    print(key, list(group))

ตรวจสอบอย่างรวดเร็ว

itertools.chain([1,2], [3,4]) สร้างอะไร

สรุปทบทวน

itertools มีตัววนซ้ำแบบไม่มีที่สิ้นสุด ได้แก่ count, cycle และ repeat การตัดช่วงด้วย islice การรวมตัววนซ้ำด้วย chain และ zip_longest และการกรองด้วย takewhile, dropwhile และ filterfalse ทั้งหมดทำงานแบบขี้เกียจและประหยัดหน่วยความจำ

คำถามที่พบบ่อย

บทเรียน “itertools: ตัววนซ้ำแบบไม่สิ้นสุดและมีขอบเขต” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “itertools: ตัววนซ้ำแบบไม่สิ้นสุดและมีขอบเขต” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “itertools: ตัววนซ้ำแบบไม่สิ้นสุดและมีขอบเขต”

ใช้ count, cycle, islice, chain และ zip_longest คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “itertools: ตัววนซ้ำแบบไม่สิ้นสุดและมีขอบเขต” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. itertools: ตัววนซ้ำแบบไม่สิ้นสุดและมีขอบเขต
  2. itertools: การจัดแบบเชิงการนับ
  3. functools: partial และ reduce
  4. functools: lru_cache และ cached_property
← กลับไปที่ Python Academy