itertools: การจัดแบบเชิงการนับ
สร้างการเรียงสับเปลี่ยน การจัดหมู่ และผลคูณคาร์ทีเซียน
itertools: การจัดแบบเชิงการนับ เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวมการจัดหมู่
itertools มีฟังก์ชันด้านการจัดหมู่สี่ฟังก์ชัน ได้แก่ product, permutations, combinations และ combinations_with_replacement
import itertools
# All orderings of 2 items from ABC
print(list(itertools.permutations("ABC", 2)))
# [(A,B),(A,C),(B,A),(B,C),(C,A),(C,B)]product()
product(*iterables, repeat=1) คำนวณผลคูณคาร์ทีเซียน ซึ่งเทียบเท่ากับการใช้ลูป for ซ้อนกัน
import itertools
print(list(itertools.product([1,2], ["a","b"])))
# [(1,"a"),(1,"b"),(2,"a"),(2,"b")]
# repeat=2 pairs each element with itself
print(list(itertools.product(range(2), repeat=2)))
# [(0,0),(0,1),(1,0),(1,1)]permutations()
permutations(it, r) ให้การจัดเรียงที่มีลำดับทั้งหมดซึ่งมีความยาว r จำนวนทั้งหมดคือ P(n,r) = n!/(n-r)!
import itertools
result = list(itertools.permutations([1,2,3], 2))
print(result)
# [(1,2),(1,3),(2,1),(2,3),(3,1),(3,2)]
print(len(result)) # 6combinations()
combinations(it, r) ให้การเลือกสมาชิกแบบไม่มีลำดับ ความยาว r โดยไม่เลือกซ้ำ จำนวนทั้งหมดคือ C(n,r) = n!/(r!(n-r)!)
import itertools
result = list(itertools.combinations([1,2,3,4], 2))
print(result)
# [(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]
print(len(result)) # 6combinations_with_replacement()
combinations_with_replacement(it, r) อนุญาตให้สมาชิกหนึ่งรายการปรากฏมากกว่าหนึ่งครั้งในการจัดหมู่
import itertools
result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]การนับโดยไม่สร้างข้อมูลทั้งหมด
ใช้ math.perm, math.comb หรือทางลัด len() ซึ่งใช้ได้กับผลลัพธ์ที่มีขอบเขต แทนการสร้างสมาชิกทั้งหมดเพียงเพื่อการนับ
import math
print(math.perm(10, 3)) # 720
print(math.comb(10, 3)) # 120การสร้างรหัสผ่าน/กุญแจ
ตัววนซ้ำด้านการจัดหมู่มีประโยชน์สำหรับสร้างคีย์ที่เป็นไปได้หรือกรณีทดสอบ โดยไม่ต้องโหลดข้อมูลทั้งหมดไว้ในหน่วยความจำ
import itertools, string
chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
pass # process without materialisingพิกัดตารางด้วย product
ใช้ product(range(rows), range(cols)) เพื่อวนซ้ำผ่านตารางสองมิติโดยไม่ต้องใช้ลูปซ้อนกัน
import itertools
for row, col in itertools.product(range(3), range(3)):
print(f"({row},{col})", end=" ")การทดสอบเซตย่อยทั้งหมด
สร้างเซตย่อยทั้งหมดของรายการได้โดยวนซ้ำผ่าน combinations สำหรับความยาวแต่ละค่าตั้งแต่ 0 ถึง n
import itertools
items = [1, 2, 3]
all_subsets = []
for r in range(len(items)+1):
all_subsets.extend(itertools.combinations(items, r))
print(all_subsets)การกำจัดข้อมูลซ้ำด้วย combinations
ใช้ combinations เพื่อเปรียบเทียบสมาชิกแต่ละคู่เพียงครั้งเดียว จึงหลีกเลี่ยงการเปรียบเทียบซ้ำระหว่าง (a,b) และ (b,a)
import itertools
words = ["apple","apricot","banana","blueberry"]
for a, b in itertools.combinations(words, 2):
if a[0] == b[0]:
print(f"Same letter: {a}, {b}")ข้อควรพิจารณาด้านประสิทธิภาพ
ลำดับด้านการจัดหมู่เติบโตอย่างรวดเร็วมาก permutations(range(12)) สร้างผลลัพธ์ 479 ล้านรายการ ควรใช้ตัวสร้างเสมอ และสร้างข้อมูลไว้ในหน่วยความจำเฉพาะส่วนที่จำเป็น
import itertools, math
n = 12
print(f"P(12,12) = {math.factorial(n):,}") # 479,001,600
# Never: list(itertools.permutations(range(12)))
# Instead: iterate lazily and break earlyตรวจสอบอย่างรวดเร็ว
ฟังก์ชัน itertools ใดสร้างคู่แบบไม่มีลำดับและไม่ซ้ำทั้งหมดจากคอลเลกชันหนึ่งชุด
สรุปทบทวน
ใช้ product สำหรับผลคูณคาร์ทีเซียน ใช้ permutations สำหรับการจัดเรียงที่มีลำดับ ใช้ combinations สำหรับเซตย่อยแบบไม่มีลำดับ และใช้ combinations_with_replacement เมื่อสมาชิกสามารถซ้ำกันได้ ควรประมวลผลตัววนซ้ำด้านการจัดหมู่แบบขี้เกียจเสมอ
คำถามที่พบบ่อย
บทเรียน “itertools: การจัดแบบเชิงการนับ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “itertools: การจัดแบบเชิงการนับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “itertools: การจัดแบบเชิงการนับ”
สร้างการเรียงสับเปลี่ยน การจัดหมู่ และผลคูณคาร์ทีเซียน คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “itertools: การจัดแบบเชิงการนับ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- itertools: ตัววนซ้ำแบบไม่สิ้นสุดและมีขอบเขต
- itertools: การจัดแบบเชิงการนับ
- functools: partial และ reduce
- functools: lru_cache และ cached_property