วิธีค้นหาดัชนีของรายการในรายการ 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 แล้ว มาเรียนรู้วิธีค้นหาดัชนีของรายการในรายการ

ค้นหาดัชนีของรายการโดยการวนซ้ำโดยใช้ลูป
ลองพิจารณารายการ 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

เมื่อใช้ข้างต้น นิพจน์สำหรับความเข้าใจรายการเพื่อสร้างดัชนีเป้าหมายมีดังนี้
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!