كيفية البحث عن فهرس عنصر في قوائم بايثون

نشرت: 2022-06-29

في هذا الدليل ، ستتعلم كيفية العثور على فهرس عنصر في قائمة Python ، باستخدام التكرارات البسيطة وفهرس طريقة القائمة المضمنة () .

عند العمل مع قوائم Python ، قد تحتاج إلى معرفة الفهرس الذي يظهر فيه عنصر معين. يمكنك القيام بذلك عن طريق:

  • التكرار خلال القائمة والتحقق مما إذا كان العنصر في الفهرس الحالي يساوي القيمة المعينة
  • استخدام index()

ستتعلم كلا الأمرين أعلاه في هذا البرنامج التعليمي. هيا بنا نبدأ.

قوائم بايثون ، إعادة النظر

في Python ، القائمة عبارة عن مجموعة من العناصر — من نفس أنواع البيانات أو أنواع مختلفة. هم متغيرون . يمكنك تعديلها في مكانها دون الحاجة إلى إنشاء قائمة جديدة.

تأمل في هذا المثال fruits : قائمة من 5 فواكه مختلفة.

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

يمكنك الحصول على طول أي كائن Python باستخدام وظيفة len() المدمجة. لذلك يمكنك استدعاء دالة len() مع كائن القائمة ( fruits ) كوسيطة للحصول على طولها ، كما هو موضح أدناه.

 len(fruits) # Output: 5

سنستخدم قائمة fruits كمثال قيد التشغيل في هذا البرنامج التعليمي.

الفهرسة في قوائم بايثون

بايثون تتبع الفهرسة الصفرية . لذلك في أي لغة Python قابلة للتكرار ، يكون العنصر الأول في الفهرس 0 ، والعنصر الثاني في الفهرس 1 ، وهكذا. إذا كان طول المتكرر k ، فإن العنصر الأخير يكون في الفهرس k - 1 .

في Python ، يمكنك استخدام الدالة range () للحصول على الفهارس أثناء تكرار حلقات التكرار.

ملاحظة : عندما تقوم بالتكرار خلال 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 .

استخدام لوظيفة الحلقة والمدى ()

دعونا نصلح target : القيمة التي نبحث عنها في القائمة.

يمكنك استخدام الدالة for loop and 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 ، فستتلقى رسالة مفادها أنه لم يتم العثور على الهدف.

استخدام التكرار والدالة ()

في 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 باستخدام وسيطات صالحة.

يمكنك ترجمة تعريف الوظيفة أعلاه إلى فهم قائمة مكافئ وسنفعل ذلك في القسم التالي.

ابحث عن فهرس لعنصر قائمة عن طريق التكرار باستخدام قائمة الفهم

يسمح لك List Comprehensions في Python بإنشاء قوائم من القوائم الحالية بناءً على بعض الشروط. ها هي البنية العامة:

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

يوضح الشكل أدناه كيفية تحديد عناصر فهم القائمة ؛ باستخدام هذا ، يمكنك تحويل وظيفة find_in_list إلى قائمة فهم.

بيثون تجد في القائمة

باستخدام ما سبق ، يكون التعبير الخاص بفهم القائمة لإنشاء مؤشرات الهدف كما يلي.

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

كتمرين ، يمكنك محاولة تشغيل مقتطف الشفرة أعلاه لبعض الأمثلة الأخرى.

ابحث عن فهرس عنصر قائمة باستخدام طريقة الفهرس ()

للعثور على فهرس عنصر في قائمة 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

كيفية التعامل مع أخطاء ValueErors في بايثون

لنرى الآن ما سيحدث إذا حاولت العثور على فهرس عنصر غير موجود في القائمة ، على سبيل المثال ، '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 and except .

الصيغة العامة لاستخدام try-except هي كما يلي.

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

باستخدام كتل try-except السابقة ، يمكننا التعامل مع 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.

  • يمكنك استخدام دالة Python for loop و range () للحصول على العناصر والمؤشرات الخاصة بكل منها. تحقق مما إذا كانت العناصر الموجودة في المؤشرات تتطابق مع الهدف.
  • يمكنك أيضًا استخدام الدالة enumerate () للوصول إلى العنصر والفهرس في نفس الوقت.
  • يمكنك استخدام كلتا الطريقتين المذكورتين أعلاه داخل تعبير list comprehension.
  • للعثور على فهرس عنصر في قائمة ، يمكنك أيضًا استخدام طريقة .index () المضمنة .
  • يعرض list.index (القيمة) فهرس التواجد الأول للقيمة في القائمة . إذا كانت القيمة غير موجودة ، فإنها ترفع قيمة ValueError .
  • يمكنك البحث في شريحة معينة من القائمة باستخدام list.index (قيمة ، بداية ، نهاية) للبحث عن تواجد قيمة في شريحة القائمة [start: end-1] .

بعد ذلك ، تعلم كيفية فرز قاموس Python حسب المفتاح أو حسب القيمة. برمجة بايثون سعيدة!