ศึก input() ปะทะ sys.stdin
เหตุใด input() แบบธรรมดาจึงทำให้เสียเวลาเมื่อมี tests ขนาดใหญ่
ศึก input() ปะทะ sys.stdin เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
ต้นทุนแฝงของ input()
การเรียก input() แต่ละครั้งทำงานเพิ่มเติมเบื้องหลัง สำหรับข้อมูลไม่กี่บรรทัด เรื่องนี้ไม่เป็นปัญหา แต่การแข่งขันอาจมีข้อมูลหลายพันบรรทัดให้คุณอ่าน ⏱️
เหตุผลที่เวลาสะสม
สาเหตุที่ช้าลงคือค่าใช้จ่ายต่อการเรียก เพราะข้อความแจ้งเตือน การล้างบัฟเฟอร์ และการตรวจสอบการเข้ารหัสจะเกิดซ้ำในทุกบรรทัดที่คุณอ่าน
พบกับ sys.stdin
วิธีที่เร็วขึ้นคืออ่านข้อมูลจาก sys.stdin ซึ่งเป็นสตรีมข้อมูลขาเข้าโดยตรง วิธีนี้ข้ามส่วนอำนวยความสะดวกเพิ่มเติมที่ input() จัดการให้คุณ
import sys
data = sys.stdinอ่านหนึ่งบรรทัดอย่างรวดเร็ว
ใช้ sys.stdin.readline() เพื่อดึงข้อมูลหนึ่งบรรทัดอย่างรวดเร็ว การทำงานคล้าย input() แต่มีค่าใช้จ่ายต่อการเรียกน้อยกว่ามาก
import sys
line = sys.stdin.readline()ใส่ใจกับอักขระขึ้นบรรทัดใหม่
readline() จะเก็บอักขระขึ้นบรรทัดใหม่ที่อยู่ท้ายบรรทัดไว้ ให้เรียก .strip() เพื่อลบอักขระนั้นก่อนแยกวิเคราะห์ค่า
n = int(sys.stdin.readline().strip())อ่านข้อมูลทั้งหมดในครั้งเดียว
หากต้องการอ่านให้เร็วที่สุด ให้ดึงข้อมูลขาเข้าทั้งหมดในครั้งเดียวด้วย sys.stdin.read() แล้วประมวลผลข้อความด้วยตัวเอง
data = sys.stdin.read()แยกข้อมูลทั้งหมด
หลังจาก read() ให้เรียก .split() เพื่อเปลี่ยนโทเค็นทั้งหมดให้เป็นรายการแบนหนึ่งรายการ ช่องว่างและอักขระขึ้นบรรทัดใหม่จะถูกจัดการพร้อมกัน
tokens = sys.stdin.read().split()กำหนด input ใหม่เพื่อเพิ่มความเร็ว
เทคนิคทั่วไปคือกำหนดให้ input ชี้ไปยัง readline เพื่อให้โค้ดเดิมยังเหมือนเดิม แต่ทำงานได้เร็วขึ้น
import sys
input = sys.stdin.readlineเมื่อ input() ก็เพียงพอแล้ว
หากโจทย์อ่านข้อมูลเพียงไม่กี่บรรทัด การใช้ input() แบบปกติก็เพียงพออย่างสมบูรณ์ ควรเก็บวิธีที่เร็วกว่าไว้สำหรับข้อมูลขนาดใหญ่
print ก็มีค่าใช้จ่ายเช่นกัน
แนวคิดเดียวกันนี้ใช้กับข้อมูลขาออก การเรียก print() หลายพันครั้งทำงานช้า เราจะจัดการเรื่องนี้ในบทเรียนถัดไปเกี่ยวกับการรวมข้อมูลเป็นชุด
เลือกเครื่องมือให้เหมาะสม
กฎทั่วไปคือ ข้อมูลขนาดเล็กให้ใช้ input() ส่วนข้อมูลขนาดใหญ่ให้เปลี่ยนไปใช้ sys.stdin การเลือกเครื่องมือให้เหมาะกับ N ช่วยรักษาคะแนนของคุณ
ตรวจสอบอย่างรวดเร็ว
ลองตรวจสอบความรู้สึกเบื้องต้นเกี่ยวกับความเร็วในการอ่านข้อมูล
ทบทวน: การอ่านอย่างรวดเร็ว
คุณได้รู้จัก sys.stdin ในฐานะทางเลือกที่เร็วกว่า input(): ใช้ readline() ทีละบรรทัด หรือใช้ read().split() เพื่ออ่านทั้งหมด เลือกเครื่องมือให้เหมาะกับขนาดข้อมูลขาเข้า ⚡
คำถามที่พบบ่อย
บทเรียน “ศึก input() ปะทะ sys.stdin” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ศึก input() ปะทะ sys.stdin” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ศึก input() ปะทะ sys.stdin”
เหตุใด input() แบบธรรมดาจึงทำให้เสียเวลาเมื่อมี tests ขนาดใหญ่ คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ศึก input() ปะทะ sys.stdin” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ศึก input() ปะทะ sys.stdin
- แยกตัวเลขจำนวนมากในบรรทัดเดียว
- ส่งข้อมูลออกเป็นชุดอย่างถูกวิธี
- อ่าน N บรรทัดและกรณีขอบ