بايثون بالمثال 10: البحث عن عنصر داخل List في Python باستخدام in و for loop

بايثون بالمثال 10 شرح البحث عن عنصر داخل List في Python باستخدام in و for loop للمبتدئين

في هذا الدرس من سلسلة بايثون بالمثال على موقع بايثون العرب سنتعلم مثالًا عمليًا مهمًا جدًا للمبتدئين، وهو البحث عن عنصر داخل List في Python.

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

في هذا المقال سنشرح أكثر من طريقة للبحث داخل القائمة في بايثون، بداية من الطريقة الأسهل باستخدام in، ثم استخدام not in، ثم البحث باستخدام for loop، ثم معرفة مكان العنصر باستخدام index()، مع توضيح الأخطاء الشائعة التي يقع فيها المبتدئون.

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

{getToc} $title={محتوى المقال}

الخلاصة السريعة: إذا كنت تريد معرفة هل العنصر موجود داخل القائمة أم لا، استخدم in. وإذا أردت تنفيذ منطق إضافي أثناء البحث، استخدم for loop. {alertInfo}

ما معنى البحث عن عنصر داخل List في Python؟

البحث داخل القائمة يعني أن تسأل البرنامج سؤالًا بسيطًا: هل هذه القيمة موجودة داخل القائمة أم لا؟

لنفترض أن لدينا قائمة أسماء:

names = ["Ali", "Sara", "Omar", "Mona"]

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

بايثون توفر أكثر من طريقة لفحص وجود عنصر داخل List، وأشهرها:

  • استخدام in للفحص المباشر.
  • استخدام not in للتأكد أن العنصر غير موجود.
  • استخدام for loop عندما نريد التحكم في عملية البحث.
  • استخدام index() عندما نريد معرفة مكان العنصر داخل القائمة.

شرح فكرة البحث عن عنصر داخل قائمة List في Python ومعرفة هل القيمة موجودة أم لا

الطريقة الأولى: البحث باستخدام in

أسهل وأوضح طريقة للبحث عن عنصر داخل List في Python هي استخدام الكلمة in.

مثال:

names = ["Ali", "Sara", "Omar", "Mona"]

if "Sara" in names:
    print("الاسم موجود")
else:
    print("الاسم غير موجود")

الناتج:

الاسم موجود

الكلمة in ترجع قيمة منطقية:

  • True إذا كان العنصر موجودًا.
  • False إذا لم يكن العنصر موجودًا.

وهذا يجعلها مناسبة جدًا مع جملة if.

أفضل طريقة للمبتدئين: استخدم in عندما تريد فحص وجود عنصر داخل القائمة بسرعة وبدون تعقيد. {alertSuccess}

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

مثال البحث داخل قائمة أرقام

لا تقتصر in على النصوص فقط، بل تعمل أيضًا مع الأرقام.

numbers = [10, 20, 30, 40, 50]

if 30 in numbers:
    print("الرقم موجود")
else:
    print("الرقم غير موجود")

الناتج:

الرقم موجود

لو بحثت عن رقم غير موجود:

numbers = [10, 20, 30, 40, 50]

if 99 in numbers:
    print("الرقم موجود")
else:
    print("الرقم غير موجود")

الناتج:

الرقم غير موجود

استخدام not in للتأكد أن العنصر غير موجود

كما توجد in، توجد أيضًا not in. وتستخدم عندما تريد التأكد أن العنصر غير موجود داخل القائمة.

fruits = ["apple", "banana", "orange"]

if "mango" not in fruits:
    print("العنصر غير موجود في القائمة")

الناتج:

العنصر غير موجود في القائمة

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

مثال عملي: إضافة عنصر بدون تكرار

لنفترض أن لديك قائمة مهارات، وتريد إضافة مهارة جديدة، لكن لا تريد تكرار نفس المهارة أكثر من مرة.

skills = ["Python", "HTML", "CSS"]

new_skill = "Python"

if new_skill not in skills:
    skills.append(new_skill)
    print("تمت إضافة المهارة")
else:
    print("المهارة موجودة مسبقًا")

print(skills)

الناتج:

المهارة موجودة مسبقًا
['Python', 'HTML', 'CSS']

لو كانت المهارة الجديدة غير موجودة:

skills = ["Python", "HTML", "CSS"]

new_skill = "JavaScript"

if new_skill not in skills:
    skills.append(new_skill)

print(skills)

الناتج:

['Python', 'HTML', 'CSS', 'JavaScript']

الطريقة الثانية: البحث باستخدام for loop

استخدام in ممتاز للفحص السريع، لكن أحيانًا تريد المرور على عناصر القائمة واحدًا واحدًا، وتنفيذ خطوات معينة أثناء البحث. هنا نستخدم for loop.

names = ["Ali", "Sara", "Omar", "Mona"]

search_name = "Sara"
found = False

for name in names:
    if name == search_name:
        found = True
        break

if found:
    print("الاسم موجود")
else:
    print("الاسم غير موجود")

الناتج:

الاسم موجود

في هذا المثال استخدمنا المتغير found كعلامة. في البداية قيمته False لأننا لم نجد العنصر بعد. وعندما نجد الاسم المطلوب نغير قيمته إلى True.


مثال استخدام for loop للبحث عن عنصر داخل قائمة في Python خطوة بخطوة

لماذا استخدمنا break أثناء البحث؟

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

هذا مهم خصوصًا عندما تكون القائمة كبيرة. فإذا كان العنصر موجودًا في بداية القائمة، لا داعي أن يستمر البرنامج في فحص بقية العناصر.

نصيحة عملية: عند البحث باستخدام for loop، استخدم break إذا كنت تريد التوقف فور العثور على العنصر. {alertInfo}

استخدام for loop مع else في البحث

توجد طريقة جميلة في بايثون قد لا يعرفها كثير من المبتدئين، وهي استخدام else مع حلقة for. يتم تنفيذ else فقط إذا انتهت الحلقة بدون أن يتم تنفيذ break.

names = ["Ali", "Sara", "Omar"]
search_name = "Mona"

for name in names:
    if name == search_name:
        print("الاسم موجود")
        break
else:
    print("الاسم غير موجود")

الناتج:

الاسم غير موجود

هذه الطريقة مفيدة، لكن للمبتدئ قد تكون طريقة found = False أوضح في البداية.

الطريقة الثالثة: معرفة مكان العنصر باستخدام index

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

names = ["Ali", "Sara", "Omar", "Mona"]

position = names.index("Sara")

print(position)

الناتج:

1

ظهرت النتيجة 1 لأن الفهرسة في بايثون تبدأ من الصفر:

  • "Ali" في الفهرس 0.
  • "Sara" في الفهرس 1.
  • "Omar" في الفهرس 2.
  • "Mona" في الفهرس 3.

مشكلة استخدام index مع عنصر غير موجود

إذا استخدمت index() مع عنصر غير موجود داخل القائمة، سيظهر خطأ ValueError.

names = ["Ali", "Sara", "Omar"]

position = names.index("Mona")

لذلك الأفضل أن تفحص وجود العنصر أولًا باستخدام in:

names = ["Ali", "Sara", "Omar"]

search_name = "Mona"

if search_name in names:
    position = names.index(search_name)
    print("العنصر موجود في الفهرس:", position)
else:
    print("العنصر غير موجود")
تنبيه مهم: لا تستخدم index() مباشرة مع عنصر قد لا يكون موجودًا. افحصه أولًا باستخدام in حتى تتجنب الخطأ. {alertWarning}

البحث بدون التأثر بالحروف الكبيرة والصغيرة

عند البحث في النصوص الإنجليزية، يجب الانتباه إلى أن بايثون تفرق بين الحروف الكبيرة والصغيرة. مثلًا:

print("Python" == "python")

الناتج:

False

لذلك إذا كنت تريد البحث بدون الاهتمام بحالة الحروف، يمكنك استخدام lower().

languages = ["Python", "JavaScript", "PHP"]

search = "python"
found = False

for language in languages:
    if language.lower() == search.lower():
        found = True
        break

if found:
    print("اللغة موجودة")
else:
    print("اللغة غير موجودة")

الناتج:

اللغة موجودة

هذه الطريقة مفيدة جدًا عند التعامل مع إدخال المستخدم، لأن المستخدم قد يكتب الكلمة بحروف مختلفة.

طريقة مختصرة للبحث بدون حساسية الحروف

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

languages = ["Python", "JavaScript", "PHP"]

search = "python"

lower_languages = []

for language in languages:
    lower_languages.append(language.lower())

if search.lower() in lower_languages:
    print("اللغة موجودة")
else:
    print("اللغة غير موجودة")

هذه الطريقة أطول قليلًا، لكنها تساعد المبتدئ على فهم الفكرة بوضوح.

مثال عملي: البحث عن منتج داخل قائمة

الآن لنأخذ مثالًا أقرب للواقع. لدينا قائمة منتجات، ونريد من المستخدم إدخال اسم منتج، ثم يخبره البرنامج هل المنتج متوفر أم لا.

products = ["keyboard", "mouse", "monitor", "laptop"]

product = input("اكتب اسم المنتج: ")

if product.lower() in products:
    print("المنتج متوفر")
else:
    print("المنتج غير متوفر")

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

مثال عملي: البحث عن طالب داخل قائمة

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

students = ["Ali", "Sara", "Omar", "Mona"]

student_name = input("اكتب اسم الطالب: ")

if student_name in students:
    print("الطالب مسجل")
else:
    print("الطالب غير مسجل")

يمكنك تحسين المثال لاحقًا بإزالة حساسية الحروف، أو إضافة طالب جديد إذا لم يكن موجودًا.

مثال عملي: البحث ثم إضافة العنصر إذا لم يوجد

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

students = ["Ali", "Sara", "Omar"]

new_student = input("اكتب اسم الطالب: ")

if new_student in students:
    print("الطالب موجود مسبقًا")
else:
    students.append(new_student)
    print("تمت إضافة الطالب")

print(students)

هذا المثال يجمع بين input() و in و append()، وهي أفكار مهمة جدًا في تعلم بايثون.

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

من المهم أن تفرق بين سؤالين:

  • هل العنصر موجود داخل القائمة؟ هنا نستخدم in.
  • أين يوجد العنصر داخل القائمة؟ هنا نستخدم index().
السؤال الأداة المناسبة مثال
هل العنصر موجود؟ in "Ali" in names
هل العنصر غير موجود؟ not in "Ali" not in names
ما مكان العنصر؟ index() names.index("Ali")
أريد تنفيذ خطوات أثناء البحث for loop المرور على العناصر واحدًا واحدًا

مقارنة بين طرق البحث داخل List

الطريقة مثال مختصر متى تستخدمها؟ ملاحظة مهمة
in item in list للفحص السريع هل العنصر موجود أم لا الأبسط والأوضح للمبتدئين
not in item not in list للتأكد أن العنصر غير موجود مفيدة قبل إضافة عنصر جديد
for loop المرور على القائمة عندما تريد تحكمًا أكبر أثناء البحث يمكن استخدام break لإيقاف الحلقة
index() list.index(item) لمعرفة مكان العنصر تسبب خطأ إذا لم يكن العنصر موجودًا

ملخص طرق البحث عن عنصر داخل List في Python باستخدام in و for loop و index

أخطاء شائعة عند البحث داخل List في Python

1. استخدام index بدون التأكد من وجود العنصر

هذا من أكثر الأخطاء الشائعة. إذا بحثت عن عنصر غير موجود باستخدام index() سيظهر خطأ.

names = ["Ali", "Sara"]

print(names.index("Mona"))

الأفضل:

if "Mona" in names:
    print(names.index("Mona"))
else:
    print("العنصر غير موجود")

2. البحث عن رقم كنص

انتبه لنوع البيانات. الرقم 10 لا يساوي النص "10".

numbers = [10, 20, 30]

print("10" in numbers)

الناتج:

False

لأن القائمة تحتوي على أرقام، بينما القيمة التي بحثنا عنها نص.

3. نسيان اختلاف الحروف الكبيرة والصغيرة

في النصوص الإنجليزية، "Python" مختلفة عن "python". إذا كنت تريد تجاهل هذا الفرق، استخدم lower().

4. استخدام for loop في حالة لا تحتاجها

إذا كنت تريد فقط معرفة هل العنصر موجود، فليس من الضروري كتابة حلقة كاملة. استخدم in مباشرة.

# الأفضل للفحص السريع
if "Ali" in names:
    print("موجود")
انتبه: قبل البحث داخل List، تأكد من نوع القيمة التي تبحث عنها، وهل تريد فقط معرفة وجودها أم تريد معرفة مكانها أيضًا. {alertWarning}

متى أستخدم in ومتى أستخدم for loop؟

استخدم in إذا كان المطلوب بسيطًا: هل العنصر موجود أم لا؟

واستخدم for loop إذا كنت تريد تنفيذ منطق إضافي أثناء البحث، مثل طباعة تفاصيل، أو مقارنة مخصصة، أو إيقاف البحث عند شرط معين، أو حساب عدد مرات ظهور عنصر.

الحالة الاختيار الأفضل
أريد معرفة هل الاسم موجود فقط in
أريد إضافة عنصر إذا لم يكن موجودًا not in مع append()
أريد معرفة مكان العنصر index() بعد الفحص بـ in
أريد البحث مع تنفيذ خطوات إضافية for loop
أريد تجاهل الحروف الكبيرة والصغيرة lower() مع for loop أو قائمة مساعدة

مثال تدريبي كامل للمبتدئين

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

  • يفحص هل الاسم موجود.
  • إذا كان موجودًا يعرض مكانه داخل القائمة.
  • إذا لم يكن موجودًا يعرض رسالة واضحة.
students = ["Ali", "Sara", "Omar", "Mona"]

student = input("اكتب اسم الطالب: ")

if student in students:
    position = students.index(student)
    print("الطالب موجود في الفهرس:", position)
else:
    print("الطالب غير موجود في القائمة")

هذا المثال مناسب جدًا للمبتدئ لأنه يربط بين input() و if و in و index().

تمرين بسيط لك

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

ابدأ بهذا الكود:

products = ["keyboard", "mouse", "monitor"]

product = input("اكتب اسم المنتج: ")

if product in products:
    print("المنتج متوفر")
else:
    print("المنتج غير موجود")

ثم حاول تطويره بنفسك بحيث يضيف المنتج إذا لم يكن موجودًا.

روابط مفيدة

الخلاصة

في هذا المثال تعلمت كيف تبحث عن عنصر داخل List في Python بأكثر من طريقة. تعلمت أن in هي الطريقة الأسهل لمعرفة هل العنصر موجود أم لا، وأن not in مفيدة عندما تريد التأكد من عدم وجود العنصر قبل إضافته.

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

تذكر هذه القواعد:

  • استخدم in للفحص السريع.
  • استخدم not in قبل إضافة عنصر لتجنب التكرار.
  • استخدم index() فقط بعد التأكد أن العنصر موجود.
  • استخدم for loop عندما تحتاج منطقًا إضافيًا أثناء البحث.
  • انتبه لنوع البيانات وحالة الحروف عند البحث في النصوص.
الخلاصة السريعة: أفضل بداية للبحث داخل List هي item in list، وبعدها اختر الطريقة المناسبة حسب ما تريد فعله بالنتيجة. {alertSuccess}

أسئلة شائعة مع إجاباتها

كيف أبحث عن عنصر داخل List في Python؟

يمكنك استخدام in مثل "Ali" in names. إذا كان العنصر موجودًا سترجع النتيجة True، وإذا لم يكن موجودًا سترجع False.

ما الفرق بين in و index في Python؟

in تفحص هل العنصر موجود أم لا، أما index() فتعطيك رقم الفهرس الذي يوجد فيه العنصر داخل القائمة.

هل index تسبب خطأ إذا لم يكن العنصر موجودًا؟

نعم، إذا استخدمت index() مع عنصر غير موجود سيظهر خطأ ValueError. لذلك الأفضل أن تفحص العنصر أولًا باستخدام in.

كيف أبحث داخل List بدون الاهتمام بالحروف الكبيرة والصغيرة؟

يمكنك استخدام lower() على العنصر الذي تبحث عنه وعلى عناصر القائمة أثناء المقارنة، حتى لا يؤثر اختلاف الحروف على نتيجة البحث.

هل يمكن البحث داخل قائمة أرقام؟

نعم، يمكن البحث داخل قائمة أرقام باستخدام in مثل 10 in numbers، لكن يجب أن تكون القيمة التي تبحث عنها رقمًا وليست نصًا.

متى أستخدم for loop بدل in؟

استخدم for loop عندما تريد تنفيذ خطوات إضافية أثناء البحث، مثل طباعة تفاصيل، أو إيقاف البحث بشرط معين، أو مقارنة العناصر بطريقة خاصة.

هل in تعمل فقط مع List؟

لا، يمكن استخدام in مع أنواع أخرى في Python مثل النصوص String، والقواميس Dictionary، والمجموعات Set، لكنها في هذا المقال استخدمت للبحث داخل List.

إرسال تعليق

أحدث أقدم