แจกแจงด้วย itertools
ผลคูณ การจัดหมู่ และการเรียงสับเปลี่ยน
แจกแจงด้วย itertools เป็นบทเรียน Competitive Programming Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Competitive Programming Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน
ให้โมดูลการวนซ้ำจัดการลูป
โมดูลการวนซ้ำของไพทอนจะสร้าง combinations และการเรียงลำดับให้ จึงเขียนโค้ดลูปน้อยลงและผิดพลาดน้อยลง 🙂
นำเข้าโมดูลก่อน
ทุกอย่างอยู่ในโมดูลเดียวกัน จึงเริ่มด้วยการนำเข้าโมดูลการวนซ้ำ จากนั้นจึงเรียกใช้ product, permutations และ combinations ได้โดยตรง
import itertoolsใช้ product แทนลูปซ้อนกัน
ใช้ product แทนลูปซ้อนกันหลายชั้นที่วนผ่านทางเลือกชุดเดียวกัน โดยจะให้ทูเพิลของตัวเลือกทุกชุดจากช่วงที่กำหนด
for combo in itertools.product(range(3), repeat=2):
print(combo)ใช้ permutations เพื่อเรียงลำดับ
เมื่อลำดับมีความสำคัญ permutations จะแสดงการจัดเรียงสิ่งของทุกแบบ เหมาะอย่างยิ่งสำหรับการลองครบทุกกรณีของปัญหาแนวพนักงานขายเดินทางขนาดเล็ก
for p in itertools.permutations([1, 2, 3]):
print(p)ใช้ combinations เพื่อเลือก
เมื่อลำดับไม่มีความสำคัญ combinations จะเลือกกลุ่มที่มีขนาด r ทุกกลุ่ม เหมาะสำหรับเลือกเซตย่อยของสิ่งของมาทดสอบ
for c in itertools.combinations([1, 2, 3, 4], 2):
print(c)permutations กับ combinations
ความแตกต่างสำคัญคือลำดับ โดย permutations ถือว่า (1,2) และ (2,1) เป็นคนละแบบกัน ในขณะที่ combinations นับเป็นการเลือกแบบเดียวกัน
ระวังการเพิ่มขึ้นของจำนวน
จำนวน permutations เพิ่มขึ้นตาม n! และพุ่งสูงอย่างรวดเร็ว แม้ n เท่ากับ 11 ก็มีการเรียงลำดับมากกว่าสี่สิบล้านแบบแล้ว ดังนั้นควรรักษา n ให้เล็ก
ทำงานแบบทยอยสร้าง
ฟังก์ชันเหล่านี้เป็นตัวสร้าง โดยให้ผลลัพธ์ทีละรายการโดยไม่สร้างรายการขนาดมหึมา หน่วยความจำจึงยังใช้ไม่มากระหว่างการวนซ้ำ
ใช้ร่วมกับการตรวจสอบ
สร้างตัวเลือกที่เป็นไปได้ แล้วเก็บไว้เฉพาะตัวเลือกที่ผ่านการทดสอบ รูปแบบนี้เปลี่ยนการค้นหาที่ยากให้เป็นลูปสั้น ๆ ที่อ่านเข้าใจง่าย
best = min(itertools.permutations(cities), key=tour_length)การเลือกแบบให้ซ้ำได้
ต้องการเลือกสิ่งของที่สามารถซ้ำได้หรือไม่ ให้ใช้การเลือกแบบให้ซ้ำได้ เพื่ออนุญาตให้สมาชิกตัวเดิมปรากฏมากกว่าหนึ่งครั้งในกลุ่ม
เลือกเครื่องมือให้เหมาะสม
ให้ถามสองข้อ ได้แก่ ลำดับมีความสำคัญหรือไม่ และสมาชิกสามารถซ้ำกันได้หรือไม่ คำตอบจะชี้ตรงไปยังฟังก์ชันที่ถูกต้องของโมดูลการวนซ้ำ
ตรวจสอบความเข้าใจ
ต้องแจกแจงทุกวิธีเลือกสิ่งของ 3 ชิ้นจาก 6 ชิ้น โดยไม่สนใจลำดับ
สรุปทบทวน
ใช้ product, permutations และ combinations เพื่อแจกแจงอย่างเป็นระเบียบ เลือกเครื่องมือโดยถามว่าลำดับมีความสำคัญหรือไม่และสมาชิกซ้ำได้หรือไม่ พร้อมระวังจำนวนที่เพิ่มขึ้น 🚀
คำถามที่พบบ่อย
บทเรียน “แจกแจงด้วย itertools” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แจกแจงด้วย itertools” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Competitive Programming Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แจกแจงด้วย itertools”
ผลคูณ การจัดหมู่ และการเรียงสับเปลี่ยน คุณปฏิบัติ Competitive Programming Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Competitive Programming Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Competitive Programming Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “แจกแจงด้วย itertools” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Competitive Programming Academy นี้ได้ไหม
ได้ บทเรียน Competitive Programming Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การลองทุกกรณีเป็นกลยุทธ์ที่ใช้ได้
- แจกแจงด้วย itertools
- แจกแจงเซตย่อยด้วยบิตมาสก์
- ลดพื้นที่ค้นหาอย่างชาญฉลาด