Competitive Programming Academy · บทเรียน

ค้นหาดัชนี ไม่ใช่แค่ค่า

ติดตามตำแหน่งด้วย enumerate

บทเรียน 4 จาก 413 ขั้นตอน

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

ตำแหน่งมีความสำคัญ

บ่อยครั้งคำตอบไม่ใช่ค่า แต่เป็นตำแหน่งที่ค่านั้นอยู่ โจทย์การแข่งขันมักถามหาดัชนีแบบเริ่มที่ 1 หรือเริ่มที่ 0 ดังนั้นจึงต้องติดตามตำแหน่งไว้

a = [4, 1, 7, 3]

ค้นหาด้วย .index()

a.index(x) จะคืนตำแหน่งของค่าที่ตรงกันตัวแรก เขียนได้รวดเร็ว แต่จะตรวจจากซ้ายไปขวาโดยใช้เวลา O(n)

pos = a.index(7)  # 2

ค่าที่ไม่พบจะทำให้เกิดข้อผิดพลาด

หากไม่มีค่านั้นอยู่ .index() จะทำให้เกิดValueError ซึ่งเป็นการทำงานล้มเหลวขณะทำงาน หากไม่แน่ใจ ควรตรวจสอบการมีอยู่ของค่าก่อน

if x in a:
    pos = a.index(x)

วนซ้ำด้วย enumerate

enumerate จะมอบทั้งดัชนีและค่าให้คุณในแต่ละรอบ วิธีนี้เป็นแนวทางที่ชัดเจนในการติดตามตำแหน่งระหว่างการตรวจดูข้อมูล

for i, v in enumerate(a):
    print(i, v)

เริ่ม enumerate ที่หนึ่ง

ผู้ตรวจคำตอบหลายแห่งต้องการตำแหน่งแบบเริ่มที่ 1 ส่ง start=1 ให้ enumerate เพื่อให้ดัชนีแรกเป็น 1 ตรงกับข้อความในโจทย์

for i, v in enumerate(a, start=1):
    ...

ดัชนีของค่าสูงสุด

หากต้องการรู้ว่าค่าสูงสุดอยู่ที่ไหน ให้ตรวจดูข้อมูลและจำดัชนีที่ดีที่สุดไว้ เพราะ max(a) เพียงอย่างเดียวจะให้แค่ค่าเท่านั้น

best = 0
for i, v in enumerate(a):
    if v > a[best]:
        best = i

เคล็ดลับการหาตำแหน่งค่าสูงสุด

เคล็ดลับแบบกระชับคือ จับคู่แต่ละดัชนีกับค่า แล้วเลือกค่าสูงสุดโดยดูจากค่า ช่วงข้อมูลจะให้ตำแหน่งโดยตรง

best = max(range(len(a)), key=lambda i: a[i])

รวบรวมดัชนีที่ตรงกันทั้งหมด

ต้องการทุกตำแหน่งที่มีค่าหนึ่งค่าหรือไม่ การใช้การสร้างแบบกระชับร่วมกับ enumerate จะรวบรวมค่าที่ตรงกันทั้งหมดได้ในบรรทัดเดียว

idx = [i for i, v in enumerate(a) if v == 7]

จับคู่ค่ากับดัชนี

สำหรับการค้นหาซ้ำหลายครั้ง ให้สร้างพจนานุกรมจากค่าไปยังดัชนีเพียงครั้งเดียว การค้นหาแต่ละครั้งหลังจากนั้นจะใช้เวลา O(1)

where = {v: i for i, v in enumerate(a)}

ต้องระวังค่าที่ซ้ำกัน

พจนานุกรมจากค่าไปยังดัชนีจะเก็บไว้เฉพาะตำแหน่งสุดท้ายเท่านั้น หากค่าที่ซ้ำกันมีความสำคัญ ให้ใช้ลิสต์แยกตามคีย์ หรือใช้ enumerate

where = {}
for i, v in enumerate(a):
    where.setdefault(v, []).append(i)

แปลงระหว่างฐานของดัชนี

โปรดระวังฐานของดัชนี หากคุณเก็บข้อมูลแบบเริ่มที่ 0 แต่ต้องพิมพ์แบบเริ่มที่ 1 ให้บวกหนึ่ง การใช้ฐานปะปนกันเป็นกับดักที่ทำให้ได้คำตอบผิดโดยไม่แสดงข้อผิดพลาด

print(pos + 1)  # 0-based to 1-based

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

คุณต้องการตำแหน่งแบบเริ่มที่ 1 ระหว่างการวนซ้ำ จะเขียนอย่างไร

ทบทวน: ติดตามตำแหน่ง

ตอนนี้คุณสามารถค้นหาดัชนีเดียว ดัชนีของค่าสูงสุด และดัชนีทั้งหมด รวมทั้งจับคู่ค่ากับตำแหน่งได้อย่างปลอดภัย enumerate คือตัวช่วยติดตามตำแหน่งที่เชื่อถือได้ 🎯

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

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

บทเรียน “ค้นหาดัชนี ไม่ใช่แค่ค่า” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ค้นหาดัชนี ไม่ใช่แค่ค่า”

ติดตามตำแหน่งด้วย enumerate คุณปฏิบัติ Competitive Programming Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “ค้นหาดัชนี ไม่ใช่แค่ค่า” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ลิสต์ การจัดทำดัชนี และการตัดช่วงสำหรับ CP
  2. สร้างอาร์เรย์อย่างรวดเร็วด้วยนิพจน์สร้างข้อมูล
  3. ค่าต่ำสุด ค่าสูงสุด ผลรวม และยอดสะสม
  4. ค้นหาดัชนี ไม่ใช่แค่ค่า
← กลับไปที่ Competitive Programming Academy