วิธีค้นหาดัชนีของรายการในรายการ Python

เผยแพร่แล้ว: 2022-06-29

ในคู่มือนี้ คุณจะได้เรียนรู้วิธีค้นหาดัชนีขององค์ประกอบในรายการ Python ทั้งโดยใช้การวนซ้ำอย่างง่าย และ index() วิธีการสร้างรายการในตัว

เมื่อทำงานกับรายการ Python คุณอาจต้องค้นหาดัชนีที่รายการใดรายการหนึ่งเกิดขึ้น คุณสามารถทำได้โดย:

  • วนรอบรายการและตรวจสอบว่ารายการที่ดัชนีปัจจุบันมีค่าเท่ากับค่าเฉพาะหรือไม่
  • การใช้ index()

คุณจะได้เรียนรู้ทั้งสองข้อข้างต้นในบทช่วยสอนนี้ มาเริ่มกันเลย.

รายการ Python เยี่ยมชมอีกครั้ง

ใน Python รายการคือชุดของรายการ ซึ่งเป็นประเภทข้อมูลเดียวกันหรือต่างกัน พวกมัน เปลี่ยนแปลง ได้ ; คุณสามารถแก้ไขได้โดยไม่ต้องสร้างรายการใหม่

ลองพิจารณาตัวอย่าง fruits นี้ : รายการผลไม้ 5 ชนิดที่แตกต่างกัน

 fruits = ["apple","mango","strawberry","pomegranate","melon"]

คุณสามารถรับความยาวของอ็อบเจ็กต์ Python ได้โดยใช้ฟังก์ชัน len() ในตัว ดังนั้นคุณสามารถเรียกใช้ฟังก์ชัน len() ด้วยรายการวัตถุ ( fruits ) เป็นอาร์กิวเมนต์เพื่อรับความยาวดังที่แสดงด้านล่าง

 len(fruits) # Output: 5

เราจะใช้รายการ fruits เป็นตัวอย่างในบทช่วยสอนนี้

การจัดทำดัชนีใน Python Lists

Python ติดตามการ จัดทำดัชนีเป็นศูนย์ ดังนั้นใน Python iterable รายการแรกจะอยู่ที่ดัชนี 0 รายการที่สองอยู่ที่ดัชนี 1 และอื่นๆ หากความยาวของ iterable คือ k รายการสุดท้ายจะอยู่ที่ดัชนี k - 1

ใน Python คุณสามารถใช้ฟังก์ชัน range() เพื่อรับดัชนีเมื่อคุณวนซ้ำผ่าน iterables

หมายเหตุ : เมื่อคุณวนซ้ำ range(k) คุณจะได้ดัชนี 0,1,2,…,(k-1) ดังนั้นโดยการตั้งค่า k = len(list) คุณจะได้รับรายการดัชนีที่ถูกต้องทั้งหมด

เซลล์รหัสต่อไปนี้จะอธิบายสิ่งนี้

 for i in range(len(fruits)): print(f"i:{i}, fruit[{i}] is {fruits[i]}") # Output i:0, fruit[0] is apple i:1, fruit[1] is mango i:2, fruit[2] is strawberry i:3, fruit[3] is pomegranate i:4, fruit[4] is melon

ตอนนี้เราได้ครอบคลุมพื้นฐานของรายการ Python แล้ว มาเรียนรู้วิธีค้นหาดัชนีของรายการในรายการ

python-fin-in-list

ค้นหาดัชนีของรายการโดยการวนซ้ำโดยใช้ลูป

ลองพิจารณารายการ fruits จากส่วนก่อนหน้า เราจะเรียนรู้วิธีค้นหาดัชนีของรายการเฉพาะในรายการนี้โดยการวนซ้ำโดยใช้ for loop

ใช้สำหรับฟังก์ชันวนรอบและช่วง ()

มาแก้ไข target : ค่าที่เรากำลังค้นหาในรายการ

คุณสามารถใช้ for loop และ range() เพื่อรับรายการดัชนีตั้งแต่ 0 ถึง len(fruits) - 1

  • วนรอบรายการผลไม้ที่เข้าถึงแต่ละดัชนี
  • ตรวจสอบว่ารายการที่ดัชนีปัจจุบัน i เท่ากับเป้าหมายหรือไม่
  • หากเป็น True ให้พิมพ์ออกมาว่าพบ target ที่ดัชนี i แล้ว
 fruits = ["apple","mango","strawberry","pomegranate","melon"] target = "mango" for i in range(len(fruits)): if fruits[i] == target: print(f"{target} found at index {i}") # Output mango found at index 1

ในตัวอย่างนี้ สตริงเป้าหมาย 'mango' ปรากฏเพียงครั้งเดียว (ที่ดัชนี 1) ในรายการ fruits

อย่างไรก็ตาม บางครั้งค่าเป้าหมายปรากฏมากกว่าหนึ่งครั้งหรือไม่ปรากฏเลย เพื่อจัดการกับกรณีเหล่านี้ มาแก้ไขการวนซ้ำด้านบนและรวมเนื้อหาไว้ในฟังก์ชันที่เรียกว่า find_in_list

การทำความเข้าใจนิยามฟังก์ชัน

ฟังก์ชัน find_in_list มีสองพารามิเตอร์:

  • target : คุณค่าที่คุณกำลังค้นหาและ
  • py_list : รายการ Python ที่คุณกำลังค้นหา
 def find_in_list(target,py_list): target_indices = [] for i in range(len(fruits)): if fruits[i] == target: target_indices.append(i) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")

ในเนื้อความของฟังก์ชัน เราเริ่มต้นรายการว่าง target_indices เราวนซ้ำรายการและเข้าถึงรายการ หากพบเป้าหมายในดัชนีใดดัชนีหนึ่ง เราจะเพิ่มดัชนีนั้นในรายการ target_indices โดยใช้เมธอด append()

หมายเหตุ : ใน Python list.append(item) เพิ่ม item ต่อท้าย list

  • หากไม่พบเป้าหมาย target_indices จะเป็นรายการว่าง ผู้ใช้จะได้รับแจ้งว่าเป้าหมายไม่มีอยู่ในรายการ
  • หากพบเป้าหมายมากกว่าหนึ่งดัชนีแล้ว target_indices จะมีดัชนีเหล่านั้นทั้งหมด

ต่อไป มากำหนดรายการ fruits กันใหม่ตามภาพ

คราวนี้เรากำลังค้นหาสตริง target 'mango' ซึ่งเกิดขึ้นสองครั้ง—ที่ดัชนี 1 และ 4

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" find_in_list(target,fruits) # Output mango is found at indices [1, 4]

ในการเรียกใช้ฟังก์ชัน find_in_list โดยมี target และ fruits เป็นอาร์กิวเมนต์ เราจะเห็นว่าดัชนีทั้งสองถูกส่งกลับ

 target = "turnip" find_in_list(target,fruits) # Output Sorry, target not found!

หากคุณลองค้นหา 'turnip' ซึ่งไม่มีอยู่ในรายการ fruits คุณจะได้รับข้อความว่าไม่พบเป้าหมาย

ใช้สำหรับ Loop และ enumerate() Function

ใน Python คุณสามารถใช้ฟังก์ชัน enumerate() เพื่อเข้าถึงทั้งดัชนีและรายการพร้อมกัน โดยไม่ต้องใช้ฟังก์ชัน range()

เซลล์รหัสต่อไปนี้แสดงวิธีที่คุณสามารถใช้ฟังก์ชัน enumerate() เพื่อรับทั้งดัชนีและรายการ

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] for index,fruit in enumerate(fruits): print(f"Index {index}: {fruit}") # Output Index 0: apple Index 1: mango Index 2: strawberry Index 3: pomegranate Index 4: mango Index 5: melon

ตอนนี้ เรามาเขียนฟังก์ชัน Python ใหม่เพื่อค้นหาดัชนีของรายการในรายการโดยใช้ฟังก์ชัน enumerate()

 def find_in_list(target,py_list): target_indices = [] for index, fruit in enumerate(fruits): if fruit == target: target_indices.append(index) if target_indices == []: print("Sorry, target not found!") else: print(f"{target} is found at indices {target_indices}")

เช่นเดียวกับส่วนก่อนหน้า ตอนนี้คุณสามารถเรียกใช้ฟังก์ชัน find_in_list ด้วยอาร์กิวเมนต์ที่ถูกต้อง

คุณสามารถแปลคำจำกัดความของฟังก์ชันด้านบนเป็นรายการความเข้าใจที่เทียบเท่าได้ และเราจะดำเนินการในส่วนถัดไป

ค้นหาดัชนีของรายการโดยการวนซ้ำโดยใช้ความเข้าใจรายการ

ความเข้าใจรายการใน Python ช่วยให้คุณสร้างรายการจากรายการที่มีอยู่ตามเงื่อนไขบางอย่าง นี่คือโครงสร้างทั่วไป:

 new_list = [<output> for <items in existing iterables> if <condition is true>]

รูปด้านล่างอธิบายวิธีการระบุองค์ประกอบของความเข้าใจรายการ เมื่อใช้สิ่งนี้ คุณสามารถแปลงฟังก์ชัน find_in_list เป็น list comprehension

python-fin-in-list

เมื่อใช้ข้างต้น นิพจน์สำหรับความเข้าใจรายการเพื่อสร้างดัชนีเป้าหมายมีดังนี้

 target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

ในแบบฝึกหัด คุณสามารถลองใช้ข้อมูลโค้ดด้านบนนี้เพื่อดูตัวอย่างอื่นๆ

ค้นหาดัชนีของรายการโดยใช้ index() Method

หากต้องการค้นหาดัชนีของรายการในรายการ Python คุณสามารถใช้เมธอด . .index() ในตัวได้ นี่คือไวยากรณ์ทั่วไป:

 list.index(value,start,end)

การแยกวิเคราะห์วิธีการข้างต้น:

  • value คือค่าเป้าหมายที่คุณกำลังค้นหา
  • start และ end เป็นอาร์กิวเมนต์ตำแหน่งที่เป็น ทางเลือก คุณสามารถใช้เพื่อค้นหาดัชนีของรายการในส่วนรายการเริ่ม start และขยายไปจนถึง end - 1

หมายเหตุ : .index() วิธีการส่งกลับ เฉพาะ ดัชนีของ value ที่ เกิดขึ้นครั้งแรก ใน list แม้ว่าคุณจะพบดัชนีของรายการในส่วนรายการ [start: end-1] วิธีนี้จะส่งคืนเฉพาะดัชนีที่ตรงกับรายการที่เกิดขึ้นครั้งแรก

มาทบทวนตัวอย่างของเราเพื่อทำความเข้าใจวิธีการทำงานของ . .index()

 fruits = ["apple","mango","strawberry","pomegranate","mango","melon"] target = "mango" fruits.index(target) 1

แม้ว่าจะมี 'mango' เกิดขึ้นสองครั้งในรายการ fruits คุณจะเห็นได้ว่ามีการส่งคืนเฉพาะดัชนีของการเกิด ครั้งแรก เท่านั้น

เพื่อให้ได้ดัชนีของการเกิดครั้งที่สองของมะม่วง เราสามารถค้นหาผ่านรายการชิ้นเริ่มต้นที่ดัชนี 2 และขยายถึงดัชนี 5 ดังแสดงด้านล่าง

 fruits.index(target,2,5) 4

วิธีจัดการกับ ValueErrors ใน Python

ทีนี้มาดูกันว่าจะเกิดอะไรขึ้นถ้าคุณพยายามค้นหาดัชนีของรายการที่ไม่อยู่ในรายการ ให้พูดว่า 'carrot'

 target = "carrot" fruits.index(target) # Output --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-81bd454e44f7> in <module>() 1 target = "carrot" 2 ----> 3 fruits.index(target) ValueError: 'carrot' is not in list

ดังที่เห็นในเซลล์โค้ดด้านบน สิ่งนี้จะแสดง ValueError ใน Python คุณสามารถจัดการสิ่งนี้เป็นข้อยกเว้นได้โดยใช้บล็อก try และ except

ไวยากรณ์ทั่วไปที่จะใช้ try-except มีดังต่อไปนี้

 try: # to do this except <ErrorType>: # do this to handle <ErrorType> as exception

การใช้บล็อกลองยกเว้นข้างต้น เราสามารถจัดการ ValueError เป็นข้อยกเว้นได้

 target = "carrot" try: fruits.index(target) except ValueError: print(f"Sorry, could not find {target} in list") # Output Sorry, could not find carrot in list

รหัสด้านบนทำสิ่งต่อไปนี้:

  • หากเป้าหมายมีอยู่ในรายการ จะส่งกลับดัชนีของเป้าหมาย
  • หากไม่มีเป้าหมาย จะจัดการ ValueError เป็นข้อยกเว้นและพิมพ์ข้อความแสดงข้อผิดพลาด

สรุป

นี่คือบทสรุปของวิธีการต่างๆ ที่คุณได้เรียนรู้เพื่อค้นหาดัชนีของรายการในรายการ Python

  • คุณสามารถใช้ฟังก์ชัน for loop และ range() ของ Python เพื่อรับไอเท็มและดัชนีที่เกี่ยวข้อง ตรวจสอบว่ารายการในดัชนีตรงกับเป้าหมายหรือไม่
  • คุณยังสามารถใช้ฟังก์ชัน enumerate() เพื่อเข้าถึงรายการและดัชนีได้พร้อมกัน
  • คุณสามารถใช้ทั้งสองวิธีข้างต้นในนิพจน์ความเข้าใจรายการ
  • หากต้องการค้นหาดัชนีของรายการในรายการ คุณสามารถใช้เมธอด . index() ในตัว
  • list.index(value) คืนค่าดัชนีของ ค่า ที่เกิดขึ้นครั้งแรกใน รายการ หากไม่มีค่า มันจะเพิ่ม ValueError
  • คุณสามารถค้นหารายการบางส่วนของรายการโดยใช้ list.index(value, start, end) เพื่อค้นหาการเกิดขึ้นของค่าในส่วนรายการ [start:end-1]

ต่อไป เรียนรู้การจัดเรียงพจนานุกรม Python ตามคีย์หรือตามค่า มีความสุขกับการเขียนโปรแกรม Python!