Python قائمة الفهرس () مع المثال

⚡ ملخص ذكي

Python تُعيد الدالة index() في القائمة موضع العنصر الأول المُعطى، بينما تُعيد الدالة looping تقوم البنى، وفهم القوائم، و enumerate()، و filter()، ومكتبة NumPy، و more_itertools.locate() بتوسيع هذه التقنية لجمع كل فهرس مطابق عبر قائمة تحتوي على قيم مكررة.

  • 🔘 دالة index(): تقوم الدالة المدمجة index() بإرجاع أول موضع أدنى لعنصر ما وتقبل حدود البداية والنهاية الاختيارية.
  • ☑️ خطأ في القيمة: تقوم الدالة index() برفع خطأ ValueError عندما يكون العنصر غير موجود، لذا قم بتغليف الاستدعاء في try-except لعمليات البحث الآمنة.
  • ✅ جميع الحالات: تقوم حلقة for أو حلقة while أو فهم القائمة بجمع كل فهرس عندما تتكرر قيمة ما داخل القائمة.
  • 🧪 أدوات مساعدة مدمجة: تقوم الدالتان enumerate() و filter() بربط فهرس بكل عنصر، مما يوفر طرقًا موجزة من سطر واحد لجمع المواضع المتطابقة.
  • 🛠️ NumPy و more_itertools: تقوم الدالة np.where() والدالة more_itertools.locate() بإرجاع جميع الفهارس المطابقة بكفاءة لمجموعات البيانات الكبيرة.
  • 🤖 سير عمل الذكاء الاصطناعي: تقوم مسارات التعلم الآلي بتحديد مواقع التصنيفات والعينات المطابقة بواسطة الفهرس قبل أن تقوم المصفوفات بتغذية النموذج.

Python فهرس القائمة ()

القائمة عبارة عن حاوية تقوم بتخزين عناصر من أنواع بيانات مختلفة (ints، floats، Boolean، strings، etc.) في تسلسل مرتب. إنها بنية بيانات مهمة مدمجة فيها Pythonيتم كتابة البيانات داخل أقواس مربعة ([])، ويتم فصل القيم بفاصلة (,).

تتم فهرسة العناصر الموجودة داخل القائمة بحيث يبدأ العنصر الأول من الفهرس 0. ويمكنك إجراء تغييرات في القائمة التي تم إنشاؤها عن طريق إضافة عناصر جديدة أو عن طريق تحديث العناصر الموجودة أو حذفها. يمكن أن تحتوي أيضًا على عناصر مكررة وقائمة متداخلة.

هناك العديد من الطرق المتاحة في القائمة، وإحدى الطرق المهمة هي الدالة index().

Python فهرس القائمة ()

تساعدك طريقة list Index() في العثور على أول أقل فهرس للعنصر المحدد. إذا كانت هناك عناصر مكررة داخل القائمة، فسيتم إرجاع الفهرس الأول للعنصر. هذه هي الطريقة الأسهل والمباشرة للحصول على الفهرس.

إلى جانب دالة index() المدمجة في القوائم، يمكنك أيضًا استخدام طرق أخرى للحصول على الفهرس مثل looping من خلال القائمة، باستخدام تراكيب القوائم، و enumerate()، وطرق التصفية.

تقوم طريقة list Index() بإرجاع أول أدنى فهرس للعنصر المحدد.

بناء الجملة

list.index(element, start, end)

المعاملات

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

قيمة الإرجاع

تقوم طريقة فهرس القائمة () بإرجاع فهرس العنصر المحدد. إذا لم يكن العنصر موجودًا في القائمة، فستؤدي طريقة الفهرس () إلى ظهور خطأ، على سبيل المثال، ValueError: 'Element' غير موجود في القائمة.

مثال: للعثور على فهرس العنصر المحدد.

في القائمة my_list = ['A', 'B', 'C', 'D', 'E', 'F']، نريد معرفة فهرس العنصرين C و F.

يوضح المثال أدناه كيفية الحصول على الفهرس.

my_list = ['A', 'B', 'C', 'D', 'E', 'F']
print("The index of element C is ", my_list.index('C'))
print("The index of element F is ", my_list.index('F'))

الإخراج:

The index of element C is  2
The index of element F is  5

مثال: استخدام البداية والنهاية في الفهرس ()

في هذا المثال، سنحاول تقييد البحث عن الفهرس في قائمة باستخدام فهرس البداية والنهاية.

my_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print("The index of element C is ", my_list.index('C', 1, 5))
print("The index of element F is ", my_list.index('F', 3, 7))
#using just the startindex
print("The index of element D is ", my_list.index('D', 1))

الإخراج:

The index of element C is  2
The index of element F is  5
The index of element D is  3

مثال: لاختبار دالة index() باستخدام عنصر غير موجود.

عند محاولة البحث في القائمة عن عنصر غير موجود، ستظهر لك رسالة خطأ كما هو موضح أدناه:

my_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print("The index of element C is ", my_list.index('Z'))

الإخراج:

Traceback (most recent call last):
File "display.py", line 3, in <module>
print("The index of element C is ", my_list.index('Z'))
ValueError: 'Z' is not in list

استخدام for-loop للحصول على فهرس عنصر في القائمة

باستخدام التابع list.index()، رأينا أنه يعطي فهرس العنصر الذي تم تمريره كوسيطة.

والآن، لنفترض أن القائمة هي: my_list = ['Guru'، 'سيا'، 'تيا'، 'Guru'، 'داكش'، 'ريا'، 'Guru']. الاسم 'Guruيظهر الاسم ' ثلاث مرات في الفهرس، وأريد جميع الفهارس التي تحمل الاسم 'Guru'.

باستخدام حلقة التكرار (for-loop)، ينبغي أن نكون قادرين على الحصول على الفهارس المتعددة كما هو موضح في المثال أدناه.

my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] 
all_indexes = [] 
for i in range(0, len(my_list)) : 
    if my_list[i] == 'Guru' : 
        all_indexes.append(i)
print("Originallist ", my_list)
print("Indexes for element Guru : ", all_indexes)

الإخراج:

Originallist  ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
Indexes for element Guru :  [0, 3, 6]

استخدام while-loop وlist.index()

سيؤدي استخدام حلقة while إلى تكرار القائمة المعطاة للحصول على جميع فهارس العنصر المحدد.

في القائمة: my_list = ['Guru'، 'سيا'، 'تيا'، 'Guru'، 'داكش'، 'ريا'، 'Guru'], نحتاج إلى جميع مؤشرات العنصر 'Guru'.

فيما يلي مثال يوضح كيفية الحصول على جميع الفهارس باستخدام حلقة while.

my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] 
result = []
elementindex = -1
while True:
    try:
        elementindex = my_list.index('Guru', elementindex+1)
        result.append(elementindex)
    except  ValueError:
        break
print("OriginalList is ", my_list)
print("The index for element Guru is ", result)

الإخراج:

OriginalList is  ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
The index for element Guru is  [0, 3, 6]

استخدام فهم القائمة للحصول على فهرس العنصر في القائمة

للحصول على جميع الفهارس، هناك طريقة سريعة ومباشرة تتمثل في الاستفادة من فهم القائمة في القائمة.

قائمة الفهم هي Python الوظائف المستخدمة لإنشاء تسلسلات جديدة (مثل القوائم والقواميس وما إلى ذلك)، أي استخدام التسلسلات التي تم إنشاؤها بالفعل.

فهي تساعد على تقليل الحلقات الأطول وتجعل قراءة التعليمات البرمجية الخاصة بك وصيانتها أسهل.

يوضح المثال التالي كيفية القيام بذلك:

my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] 
print("Originallist ", my_list)
all_indexes = [a for a in range(len(my_list)) if my_list[a] == 'Guru']
print("Indexes for element Guru : ", all_indexes)

الإخراج:

Originallist  ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
Indexes for element Guru :  [0, 3, 6]

استخدام Enumerate للحصول على فهرس عنصر في القائمة

الدالة Enumerate() هي دالة مدمجة متوفرة مع Pythonيمكنك استخدام دالة enumerate للحصول على جميع فهارس العنصر في القائمة. تأخذ هذه الدالة مدخلات على شكل كائن قابل للتكرار (أي كائن يمكن تكرار عناصره)، ويكون الناتج كائنًا يحتوي على عداد لكل عنصر.

يوضح المثال التالي كيفية استخدام دالة enumerate على قائمة للحصول على جميع الفهارس لعنصر معين.

my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] 
print("Originallist ", my_list)
print("Indexes for element Guru : ", [i for i, e in enumerate(my_list) if e == 'Guru'])

الإخراج:

Originallist  ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
Indexes for element Guru :  [0, 3, 6]

استخدام عامل التصفية للحصول على فهرس عنصر في القائمة

يقوم أسلوب التصفية () بتصفية القائمة المحددة بناءً على الوظيفة المحددة. سيتم تمرير كل عنصر من عناصر القائمة إلى الوظيفة، وسيتم تصفية العناصر المطلوبة بناءً على الشرط الوارد في الوظيفة.

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

يوضح المثال التالي كيفية استخدام عامل التصفية على قائمة.

my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] 
print("Originallist ", my_list)
all_indexes = list(filter(lambda i: my_list[i] == 'Guru', range(len(my_list)))) 
print("Indexes for element Guru : ", all_indexes)

الإخراج:

Originallist  ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
Indexes for element Guru :  [0, 3, 6]

استخدام NumPy للحصول على فهرس عنصر في القائمة

تُستخدم مكتبة NumPy بشكل خاص للمصفوفات. لذا سنستخدمها هنا للحصول على فهرس العنصر المطلوب من القائمة المعطاة.

للاستفادة من NumPy، يتعين علينا تثبيته واستيراده.

إليك الخطوات اللازمة لذلك:

الخطوة 1) قم بتثبيت NumPy

pip install numpy

الخطوة 2) قم باستيراد وحدة NumPy.

import numpy as np

الخطوة 3) استخدم np.array لتحويل القائمة إلى مصفوفة.

my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] 
np_array = np.array(my_list)

الخطوة 4) احصل على فهرس العنصر الذي تريده، باستخدام np.where().

item_index = np.where(np_array == 'Guru')[0]

رمز العمل النهائي مع الإخراج هو كما يلي:

import numpy as np
my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] 
np_array = np.array(my_list)
item_index = np.where(np_array == 'Guru')[0]
print("Originallist ", my_list)
print("Indexes for element Guru :", item_index)

الإخراج:

Originallist['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
Indexes for element Guru : [0 3 6]

استخدام الدالة more_itertools.locate() للحصول على فهرس عنصر في قائمة

تساعد الدالة `more_itertools.locate()` في العثور على فهارس العنصر في القائمة. ستعمل هذه الوحدة مع Python الإصدار 3.5+. الحزمة more_itertools يجب تثبيته أولاً للاستفادة منه.

فيما يلي خطوات تثبيت واستخدام more_itertools:

الخطوة 1) قم بتثبيت more_itertools باستخدام pip (Python مدير الحزم). الأمر هو

pip install more_itertools

الخطوة 2) بمجرد الانتهاء من التثبيت، قم باستيراد ملف حدد الوحدة كما هو موضح أدناه.

from more_itertools import locate

يمكنك الآن الاستفادة من وحدة تحديد الموقع في القائمة كما هو موضح أدناه في المثال:

from more_itertools import locate
my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru'] 
print("Originallist : ", my_list)
print("Indexes for element Guru :", list(locate(my_list, lambda x: x == 'Guru')))

الإخراج:

Originallist :  ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
Indexes for element Guru : [0, 3, 6]

الأسئلة الشائعة

تُثير الدالة index() خطأ ValueError عند فقدان العنصر. لذا، يُنصح بتغليف استدعاء الدالة ضمن كتلة try-except، أو التحقق أولاً من وجود العنصر باستخدام عامل التشغيل in، لتجنب تعطل البرنامج في حال فقدان قيمة.

القيمة التي تُرجعها الدالة index() هي دائمًا موضع غير سالب محسوب من البداية. يمكنك تمرير وسيطات بداية أو نهاية سالبة لتحديد نطاق البحث، لكن الدالة index() نفسها لا تُرجع أبدًا فهرسًا سالبًا للعنصر الذي تم العثور عليه.

نعم. تقوم الدالة index() بمقارنة العناصر بدقة، لذا 'Guruتُعامل الكلمتان ' و'guru' كقيمتين مختلفتين. البحث عن حالة الأحرف الخاطئة يُسبب خطأ ValueError. قم بتطبيع السلاسل النصية باستخدام الدالة lower() قبل البحث إذا كنت بحاجة إلى مطابقة غير حساسة لحالة الأحرف.

استخدم عامل التشغيل "in"، على سبيل المثال إذا 'Guruفي my_list. تُرجع الدالة قيمة True أو False دون إثارة أي خطأ، لذا يمكنك استدعاء index() بأمان فقط عندما يكون العنصر موجودًا بالفعل في القائمة.

في عملية بحث واحدة، تكون الدالة المدمجة index() فعالة بالفعل لأنها تتوقف عند أول تطابق. أما للعثور على العديد من القيم بشكل متكرر، فقم بإنشاء خريطة قاموس.ping يتم تعيين كل قيمة إلى فهرسها، مما يحول كل عملية بحث إلى عملية سريعة ذات وقت ثابت.

Python توفر القوائم الدالة index()، لكنها لا تحتوي على الدالة find(). تُطلق الدالة index() خطأ ValueError عند غياب العنصر، بينما تُرجع الدالة find() الخاصة بالسلاسل النصية القيمة -1. بالنسبة للقوائم، يجب معالجة الخطأ أو التحقق من وجود العنصر باستخدام عامل التشغيل in.

يساعد تحديد فهرس عنصر ما في ربط التصنيفات الفئوية بالمواقع الرقمية، أو العثور على مكان ظهور فئة متوقعة، أو محاذاة أعمدة الميزات قبل التدريب. يُوسّع NumPy هذا باستخدام np.where() للبحث السريع عن الفهرس عبر المصفوفات ومجموعات البيانات الكبيرة.

نعم. يقوم GitHub Copilot ومساعدو الذكاء الاصطناعي بإنشاء عمليات بحث قائمة على الفهرسة () والتعداد () والفهم من تعليق عادي، ويقترحون معالجة آمنة للأخطاء للقيم المفقودة، ويعيدون هيكلة الحلقات، على الرغم من أنه لا يزال يتعين عليك اختبار الحالات الحدية والتأكد من المواضع التي تم إرجاعها.

تلخيص هذه التدوينة بـ: