คุณหาของใน Python list อย่างไร? เป็นคำถามที่นักเขียนโค้ด Python ทุกคนพบเจอที่บางจุด โชคดีที่ภาษานี้เสนอหลายวิธีที่คุณสามารถหาของในรายการได้ เช่น การใช้ตัวดำเนินการ in หรือการค้นหาเชิงเส้น (linear search)
ในคู่มือนี้ เราพูดถึงสี่วิธีในการหาของในรายการ เราจะเดินทางผ่านตัวอย่างของแต่ละวิธีเหล่านี้ เพื่อคุณสามารถเรียนรู้ว่าพวกมันทำงานอย่างไร
Python Find in List โดยใช้ "in"
Python มีตัวดำเนินการพิเศษชื่อ in ตัวดำเนินการนี้ตรวจสอบว่าค่าอยู่ในรายการหรือไม่ ตัวดำเนินการนี้บางครั้งเรียกว่า "membership operator" (ตัวดำเนินการสมาชิก) เพราะมันตรวจสอบว่าค่าเป็นสมาชิกของรายการหรือไม่
ในตัวอย่างนี้ เราดำเนินร้านรองเท้า และเราต้องการตรวจสอบว่ารองเท้าคู่ใดคู่หนึ่งมีในสต็อก วิธีหนึ่งในการทำเช่นนี้คือใช้ตัวดำเนินการ in
เริ่มต้นด้วยการกำหนดรายการรองเท้า:
shoes = ["Adidas ZX Flux", "Adidas Ultraboost", "Adidas Gazelle", "Adidas Runfalcon"]
ต่อไป เราขอผู้ใช้ป้อนรองเท้าที่ต้องการหา:
to_find = input("What shoe are you looking for? ") เราใช้คำสั่ง input() เพื่อรวบรวมชื่อรองเท้า ต่อไป เราใช้คำสั่ง "if" เพื่อตรวจสอบว่ารองเท้าที่ผู้ใช้ป้อนอยู่ในรายการรองเท้าของเราหรือไม่:
if to_find in shoes: print("{} shoes are in stock.".format(to_find)) else: print("{} shoes are not in stock.".format(to_find)) คำสั่ง if ของเราจะ execute หากรองเท้าที่ผู้ใช้ป้อนพบในรายการของเรา มิฉะนั้น คำสั่ง else จะรัน ลองโค้ดของเรา:
What shoe are you looking for? Adidas Runfalcon Adidas Runfalcon shoes are in stock.
โค้ดของเราระบุได้สำเร็จว่า รองเท้า "Adidas Runfalcon" อยู่ในสต็อก นี่ทำให้คำสั่ง if ของเรา execute
Python Find in List โดยใช้ Linear Search
Linear search เป็นอัลกอริทึมค้นหาแบบง่ายที่หาของในรายการ Linear search เริ่มต้นที่ปลายหนึ่งของรายการและเปรียบเทียบค่ากับทุกองค์ประกอบในรายการ หากค่านั้นอยู่ในรายการ Linear search จะคืนค่าตำแหน่งของของ
เริ่มต้นด้วยการเขียนฟังก์ชันที่ทำ linear search ของเรา:
def linear_search(array, to_find): for i in range(0, len(array)): if array[i] == to_find: return i return -1
โค้ดของเราใช้ลูป "for" เพื่อวนซ้ำผ่านทุกรายการในรายการ "array" หากรายการนั้นถูกพบ ตำแหน่งดัชนีของรายการนั้นจะถูกคืนค่าไปยังโปรแกรมหลัก หากรายการไม่ถูกพบหลังจากค้นหาทั้งรายการ -1 จะถูกคืนค่าไปยังโปรแกรมหลัก
มาไปที่โปรแกรมหลักของเราและเรียกฟังก์ชันของเรา:
shoes = ["Adidas ZX Flux", "Adidas Ultraboost", "Adidas Gazelle", "Adidas Runfalcon"] to_find = input("What shoe are you looking for? ") found = linear_search(shoes, to_find) โค้ดนี้ขอรองเท้าที่ผู้ใช้กำลังมองหา จากนั้น โค้ดของเราเรียกฟังก์ชัน linear_search เพื่อหาว่ารองเท้าคู่นั้นมีอยู่ในรายการหรือไม่
สุดท้าย เราใช้คำสั่ง if เพื่อแจ้งผู้ใช้ว่าพบรองเท้าหรือไม่:
if found != -1: print("{} shoes are in stock.".format(to_find)) else: print("{} shoes are not in stock.".format(to_find)) หากฟังก์ชัน linear_search ของเราคืนค่า -1 หมายความว่าของไม่ถูกพบในรายการ คำสั่ง if ของเราจะรัน หากค่าที่คืนโดยฟังก์ชัน linear_search ไม่เท่ากับ -1 หากค่าเท่ากับ -1 คำสั่ง else จะรัน
ลองรันโค้ดของเรา:
What shoe are you looking for? Adidas Samba Adidas Samba shoes are not in stock.
โค้ดของเราไม่พบรองเท้า Adidas Samba ในรายการของเรา
Python Find in List โดยใช้ index()
ฟังก์ชันในตัว index() ให้คุณหาตำแหน่งดัชนีของรายการในรายการ มาเขียนโปรแกรมที่หาตำแหน่งของรองเท้าในรายการโดยใช้ index()
เริ่มต้น กำหนดรายการรองเท้า เราขอผู้ใช้ป้อนรองเท้าที่โปรแกรมของเราจะค้นหาในรายการรองเท้าของเรา:
shoes = ["Adidas ZX Flux", "Adidas Ultraboost", "Adidas Gazelle", "Adidas Runfalcon"] to_find = input("What shoe are you looking for? ") ต่อไป เราใช้เมธอด index() เพื่อคืนค่าตำแหน่งดัชนีของรายการในรายการของรองเท้านั้น:
try: found = shoes.index(to_find) print("{} shoes are in stock. They are at index position {} in the list of shoes.".format(to_find, found)) except: print("{} shoes are not in stock.".format(to_find)) เมธอด index() คืนค่า ValueError หากของไม่ถูกพบในรายการ นั่นคือเหตุผลที่เราใช้มันเป็นส่วนหนึ่งของบล็อก "try...except"
หากรองเท้าไม่สามารถหาได้ ValueError จะถูกยกขึ้น ณ จุดนี้ บล็อก "except" จะถูกรัน หากพบรองเท้า บล็อก "try" จะ execute สำเร็จ
รันโค้ดของเรา:
What shoe are you looking for? Adidas Gazelle Adidas Gazelle shoes are in stock. They are at index position 2 in the list of shoes.
โค้ดของเราระบุได้สำเร็จว่ารองเท้า Adidas Gazelle อยู่ในสต็อก โปรแกรมของเรายังบอกตำแหน่งที่รองเท้าเหล่านั้นจัดเก็บในรายการของเรา
Python Find in List โดยใช้ List Comprehension
คุณหาของหลายอย่างในรายการที่ตรงตามเงื่อนไขเฉพาะโดยใช้ list comprehension
เรามีรายการรองเท้า และเราต้องการคืนค่าเฉพาะที่เป็นแบรนด์ Adidas เราสามารถทำได้โดยใช้ list comprehension เริ่มต้นด้วยการกำหนดรายการรองเท้า:
shoes = ["Nike PG 4", "Adidas Ultraboost", "Adidas Gazelle", "Nike Air Max Verona"]
ต่อไป เราเขียน list comprehension ที่ดึงรองเท้าทั้งหมดที่มีคำว่า "Nike" List comprehensions ใช้ไวยากรณ์คล้ายกับลูป for:
nike_shoes = [shoe for shoe in shoes if "Nike" in shoe] print(nike_shoes)
นิพจน์รายการวนซ้ำผ่านทุกรองเท้าในรายการ "shoe" นิพจน์ตรวจสอบว่าคำว่า Nike อยู่ในชื่อรองเท้าแต่ละคู่ หากใช่ รองเท้านั้นจะถูกเพิ่มเข้าไปในรายการ "nike_shoes" มิฉะนั้น ไม่มีอะไรเกิดขึ้น
มารันโค้ดของเรา:
['Nike PG 4', 'Nike Air Max Verona']
โค้ดของเราคืนค่ารายการรองเท้า Nike
สรุป
มีหลายวิธีที่คุณสามารถหาของในรายการได้ วิธีที่นิยมมากที่สุดรวมถึง:
- ใช้ตัวดำเนินการสมาชิก
in - ใช้ Linear search
- ใช้เมธอด
index() - ใช้ List comprehension
ตอนนี้คุณพร้อมที่จะค้นหาของใน Python list อย่างนักเขียนโค้ดมืออาชีพแล้ว!