تمارين Lists في بايثون مع الحلول: 30 تدريبًا عمليًا للمبتدئين

تمارين Lists في بايثون مع الحلول للمبتدئين

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

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

{alertInfo} طريقة الاستفادة: اقرأ المطلوب، حاول الحل، شغّل الكود، ثم افتح «عرض الحل بعد المحاولة». ليس شرطًا أن يكون حلك مطابقًا للحل الموجود ما دام صحيحًا ومفهومًا.

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

جدول سريع للتمارين

المستوىالتمارينالمهارات
سهل1–10إنشاء List، الفهرسة، Slicing، الإضافة، الحذف، الطول.
متوسط11–20البحث، العد، الحلقات، enumerate، sum/min/max، الترتيب والنسخ.
عملي21–30حذف التكرار، الفلترة، List Comprehension، النصوص، القوائم المتداخلة ومهام مركبة.

المستوى السهل: أساسيات التعامل مع List

التمرين 1: إنشاء قائمة وطباعتها

المطلوب: أنشئ قائمة fruits تحتوي apple وbanana وorange ثم اطبعها.

الناتج المتوقع: ['apple', 'banana', 'orange']

عرض الحل بعد المحاولة
fruits = ["apple", "banana", "orange"]
print(fruits)

شرح الحل: أنشأنا List بالأقواس المربعة ثم طبعناها.

التمرين 2: الوصول لأول وآخر عنصر

المطلوب: من colors = ["red", "green", "blue", "black"] اطبع أول عنصر وآخر عنصر.

الناتج المتوقع: red ثم black.

عرض الحل بعد المحاولة
colors = ["red", "green", "blue", "black"]
print(colors[0])
print(colors[-1])

شرح الحل: الفهرس 0 لأول عنصر، و-1 لآخر عنصر.

التمرين 3: استخراج جزء من القائمة

المطلوب: من numbers = [10, 20, 30, 40, 50, 60] استخرج العناصر من 20 إلى 40 في List جديدة.

الناتج المتوقع: [20, 30, 40]

عرض الحل بعد المحاولة
numbers = [10, 20, 30, 40, 50, 60]
result = numbers[1:4]
print(result)

شرح الحل: Slicing يبدأ من الفهرس 1 ويتوقف قبل الفهرس 4.

شرح بصري للفهرسة والتقطيع Slicing في Lists بايثون

التمرين 4: تعديل عنصر داخل القائمة

المطلوب: غيّر القيمة 75 إلى 80 داخل scores = [90, 75, 88].

الناتج المتوقع: [90, 80, 88]

عرض الحل بعد المحاولة
scores = [90, 75, 88]
scores[1] = 80
print(scores)

شرح الحل: القوائم قابلة للتعديل ويمكن استبدال العنصر بفهرسه.

التمرين 5: إضافة عنصر في نهاية List

المطلوب: أضف "Omar" إلى نهاية students = ["Ali", "Sara"].

عرض الحل بعد المحاولة
students = ["Ali", "Sara"]
students.append("Omar")
print(students)

شرح الحل: append() تضيف عنصرًا واحدًا في النهاية.

التمرين 6: إضافة عنصر في مكان محدد

المطلوب: أضف "Sara" بين "Ali" و"Omar" في القائمة.

عرض الحل بعد المحاولة
students = ["Ali", "Omar"]
students.insert(1, "Sara")
print(students)

شرح الحل: insert() تستقبل الفهرس ثم القيمة.

التمرين 7: دمج عناصر قائمتين باستخدام extend

المطلوب: أضف عناصر [4, 5] إلى [1, 2, 3] بحيث تصبح قائمة مسطحة واحدة.

الناتج المتوقع: [1, 2, 3, 4, 5]

عرض الحل بعد المحاولة
numbers = [1, 2, 3]
numbers.extend([4, 5])
print(numbers)

شرح الحل: extend() تضيف عناصر القائمة الثانية واحدًا واحدًا.

التمرين 8: حذف عنصر بالقيمة

المطلوب: احذف "banana" من ["apple", "banana", "orange"].

عرض الحل بعد المحاولة
fruits = ["apple", "banana", "orange"]
fruits.remove("banana")
print(fruits)

شرح الحل: remove() تحذف أول ظهور للقيمة.

التمرين 9: حذف عنصر بالفهرس والاحتفاظ به

المطلوب: من tasks = ["Email", "Meeting", "Report"] احذف العنصر عند الفهرس 1 وخزّنه في متغير.

الناتج المتوقع: Meeting

عرض الحل بعد المحاولة
tasks = ["Email", "Meeting", "Report"]
removed = tasks.pop(1)
print(removed)
print(tasks)

شرح الحل: pop() تحذف حسب الفهرس وتعيد العنصر المحذوف.

التمرين 10: حساب عدد عناصر القائمة

المطلوب: احسب عدد العناصر داخل ["Python", "Java", "C++", "Go"].

الناتج المتوقع: 4

عرض الحل بعد المحاولة
languages = ["Python", "Java", "C++", "Go"]
print(len(languages))

شرح الحل: len() تعيد عدد عناصر List.

المستوى المتوسط: البحث والحلقات والترتيب

التمرين 11: التحقق من وجود عنصر

المطلوب: تحقق هل "Sara" موجودة في قائمة الأسماء واطبع رسالة مناسبة.

عرض الحل بعد المحاولة
names = ["Ali", "Sara", "Omar"]
if "Sara" in names:
    print("موجودة")
else:
    print("غير موجودة")

شرح الحل: المعامل in يفحص وجود القيمة.

التمرين 12: عدّ تكرار قيمة

المطلوب: احسب عدد مرات ظهور الرقم 5 في [5, 2, 5, 8, 5, 1].

الناتج المتوقع: 3

عرض الحل بعد المحاولة
numbers = [5, 2, 5, 8, 5, 1]
print(numbers.count(5))

شرح الحل: count() تعيد عدد مرات ظهور القيمة.

التمرين 13: إيجاد فهرس عنصر بأمان

المطلوب: ابحث عن موقع "blue" وتجنب الخطأ إذا لم تكن القيمة موجودة.

عرض الحل بعد المحاولة
colors = ["red", "green", "blue"]
target = "blue"

if target in colors:
    print(colors.index(target))
else:
    print("غير موجود")

شرح الحل: نفحص وجود القيمة قبل index() لأنها ترفع ValueError إذا لم تجد العنصر.

التمرين 14: المرور على عناصر List باستخدام for

المطلوب: اطبع كل مهارة من ["Python", "Git", "SQL"] في سطر مستقل.

عرض الحل بعد المحاولة
skills = ["Python", "Git", "SQL"]

for skill in skills:
    print(skill)

شرح الحل: for تمر مباشرة على عناصر القائمة.

التمرين 15: طباعة العنصر مع رقمه باستخدام enumerate

المطلوب: اطبع المهام بترقيم يبدأ من 1.

الناتج المتوقع: 1 Email ثم 2 Meeting ثم 3 Report.

عرض الحل بعد المحاولة
tasks = ["Email", "Meeting", "Report"]

for number, task in enumerate(tasks, start=1):
    print(number, task)

شرح الحل: enumerate() تعطي الرقم والعنصر معًا.

التمرين 16: حساب مجموع عناصر List

المطلوب: احسب مجموع [12, 8, 15, 5].

الناتج المتوقع: 40

عرض الحل بعد المحاولة
numbers = [12, 8, 15, 5]
total = sum(numbers)
print(total)

شرح الحل: sum() تجمع القيم الرقمية.

التمرين 17: إيجاد أكبر وأصغر قيمة

المطلوب: من [72, 95, 61, 88, 79] اطبع أعلى درجة وأقل درجة.

عرض الحل بعد المحاولة
scores = [72, 95, 61, 88, 79]
print("أعلى:", max(scores))
print("أقل:", min(scores))

شرح الحل: max() للأكبر وmin() للأصغر.

التمرين 18: استخراج كل عنصر ثانٍ باستخدام Slicing

المطلوب: من [0, 1, 2, 3, 4, 5, 6] استخرج العناصر ذات الفهارس 0 و2 و4 و6.

الناتج المتوقع: [0, 2, 4, 6]

عرض الحل بعد المحاولة
numbers = [0, 1, 2, 3, 4, 5, 6]
result = numbers[::2]
print(result)

شرح الحل: الـstep بقيمة 2 يأخذ عنصرًا ويتجاوز الذي يليه.

التمرين 19: ترتيب قائمة دون تغيير الأصل

المطلوب: رتّب [8, 3, 10, 1] تصاعديًا في List جديدة ثم اطبع الأصل.

عرض الحل بعد المحاولة
numbers = [8, 3, 10, 1]
sorted_numbers = sorted(numbers)

print(sorted_numbers)
print(numbers)

شرح الحل: sorted() تعيد قائمة جديدة مرتبة وتترك الأصل.

التمرين 20: إنشاء نسخة مستقلة من List

المطلوب: أنشئ نسخة مستقلة من ["A", "B", "C"] ثم أضف "D" إلى النسخة فقط.

عرض الحل بعد المحاولة
original = ["A", "B", "C"]
copied = original.copy()

copied.append("D")

print(original)
print(copied)

شرح الحل: copy() تنشئ نسخة سطحية مستقلة؛ assignment لا يفعل ذلك.

الفرق بين تعديل List الأصلية وإنشاء نسخة جديدة في بايثون

المستوى العملي: فلترة وComprehension وقوائم متداخلة

التمرين 21: حذف التكرار مع الحفاظ على الترتيب

المطلوب: حوّل ["Ali", "Sara", "Ali", "Omar", "Sara"] إلى List بدون تكرار مع الحفاظ على أول ظهور.

الناتج المتوقع: ['Ali', 'Sara', 'Omar']

عرض الحل بعد المحاولة
names = ["Ali", "Sara", "Ali", "Omar", "Sara"]
unique_names = list(dict.fromkeys(names))
print(unique_names)

شرح الحل: dict.fromkeys() يزيل التكرار ويحافظ على ترتيب أول ظهور في بايثون الحديثة.

التمرين 22: استخراج الأرقام الزوجية باستخدام حلقة

المطلوب: من [1, 2, 3, 4, 5, 6, 7, 8] أنشئ List جديدة للأرقام الزوجية فقط.

عرض الحل بعد المحاولة
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = []

for number in numbers:
    if number % 2 == 0:
        even_numbers.append(number)

print(even_numbers)

شرح الحل: نضيف الرقم فقط عندما يكون باقي قسمته على 2 صفرًا.

التمرين 23: إنشاء مربعات الأرقام باستخدام List Comprehension

المطلوب: من [1, 2, 3, 4, 5] أنشئ List تحتوي مربع كل رقم.

الناتج المتوقع: [1, 4, 9, 16, 25]

عرض الحل بعد المحاولة
numbers = [1, 2, 3, 4, 5]
squares = [number ** 2 for number in numbers]
print(squares)

شرح الحل: List Comprehension تنشئ قائمة جديدة بتحويل كل عنصر.

التمرين 24: فلترة القيم بدون تعديل القائمة أثناء المرور

المطلوب: من [-3, 5, -1, 8, 0, 4] أنشئ List جديدة للقيم الأكبر من أو تساوي صفرًا.

عرض الحل بعد المحاولة
numbers = [-3, 5, -1, 8, 0, 4]
filtered = [number for number in numbers if number >= 0]
print(filtered)

شرح الحل: ننشيء List جديدة بدل حذف عناصر من القائمة نفسها أثناء المرور.

التمرين 25: فلترة الكلمات حسب الطول

المطلوب: من ["AI", "Python", "Code", "Programming"] استخرج الكلمات التي طولها 5 أحرف أو أكثر.

عرض الحل بعد المحاولة
words = ["AI", "Python", "Code", "Programming"]
long_words = [word for word in words if len(word) >= 5]
print(long_words)

شرح الحل: الشرط داخل List Comprehension يختار الكلمات المناسبة فقط.

التمرين 26: تحويل String إلى List ثم إعادته إلى String

المطلوب: حوّل "Python is easy" إلى قائمة كلمات ثم ادمجها بشرطة -.

الناتج المتوقع: Python-is-easy

عرض الحل بعد المحاولة
text = "Python is easy"
words = text.split()
result = "-".join(words)

print(words)
print(result)

شرح الحل: split() تقسم النص، وjoin() تجمع عناصر النصوص.

التمرين 27: الوصول إلى عنصر داخل Nested List

المطلوب: من [[1, 2, 3], [4, 5, 6], [7, 8, 9]] اطبع الرقم 6.

الناتج المتوقع: 6

عرض الحل بعد المحاولة
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

print(matrix[1][2])

شرح الحل: نصل إلى الصف بالفهرس 1 ثم إلى العنصر بالفهرس 2.

شرح القوائم المتداخلة Nested Lists في بايثون بشكل بصري

التمرين 28: تحويل Nested List إلى قائمة مسطحة

المطلوب: حوّل [[1, 2], [3, 4], [5, 6]] إلى قائمة واحدة.

الناتج المتوقع: [1, 2, 3, 4, 5, 6]

عرض الحل بعد المحاولة
nested = [[1, 2], [3, 4], [5, 6]]

flat = [
    number
    for row in nested
    for number in row
]

print(flat)

شرح الحل: نستخدم حلقتين داخل List Comprehension للمرور على الصفوف ثم عناصرها.

التمرين 29: إيجاد ثاني أكبر قيمة مختلفة

المطلوب: من [90, 75, 90, 88, 60] أوجد ثاني أكبر درجة مختلفة.

الناتج المتوقع: 88

عرض الحل بعد المحاولة
scores = [90, 75, 90, 88, 60]

unique_scores = list(set(scores))
unique_scores.sort(reverse=True)

print(unique_scores[1])

شرح الحل: نزيل التكرار ثم نرتب تنازليًا ونأخذ القيمة الثانية.

التمرين 30: تحليل درجات الطلاب في مهمة واحدة

المطلوب: لديك [78, 95, 62, 88, 50, 91]. اطبع المتوسط، الأعلى، الأقل، والدرجات الناجحة 60 فأكثر مرتبة تنازليًا.

عرض الحل بعد المحاولة
scores = [78, 95, 62, 88, 50, 91]

average = sum(scores) / len(scores)
highest = max(scores)
lowest = min(scores)

passed = [
    score
    for score in scores
    if score >= 60
]

passed = sorted(passed, reverse=True)

print("المتوسط:", average)
print("الأعلى:", highest)
print("الأقل:", lowest)
print("الناجحون:", passed)

شرح الحل: يجمع التمرين sum وlen وmin وmax والفلترة والترتيب في مهمة واحدة.

كيف تعرف أنك استفدت فعلًا من التمارين؟

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

أخطاء شائعة أثناء التدريب على Lists

  • فتح الحل بسرعة: امنح نفسك عدة دقائق للمحاولة أولًا.
  • الخلط بين append وextend: الأولى تضيف عنصرًا واحدًا، والثانية تضيف عناصر iterable واحدًا واحدًا.
  • الخلط بين remove وpop: remove تحذف بالقيمة، بينما pop تحذف بالفهرس وتعيد العنصر.
  • الخلط بين sort وsorted: sort تعدّل القائمة الأصلية، بينما sorted تنشئ قائمة جديدة.
  • النسخ باستخدام assignment: list2 = list1 لا تنشئ نسخة مستقلة؛ استخدم copy() عند الحاجة إلى نسخة سطحية.
  • تعديل القائمة أثناء المرور عليها: عند الفلترة أنشئ قائمة جديدة بدل حذف العناصر من القائمة التي تمر عليها.
  • حذف التكرار باستخدام set: لا تعتمد على set إذا كان ترتيب أول ظهور مهمًا؛ استخدم طريقة تحافظ على الترتيب مثل dict.fromkeys().

روابط داخلية لمراجعة المفاهيم عند الحاجة

مصادر رسمية للتوسع

الخلاصة

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

{alertSuccess} اختبارك الحقيقي: اختر ثلاثة تمارين من المستوى العملي، غيّر البيانات والشروط، ثم اكتب الحل من الصفر. إذا نجحت دون نسخ الكود، فقد بدأت تتقن التعامل مع Lists فعلًا.

أسئلة شائعة

ما أفضل طريقة للتدرب على Lists في بايثون؟

حاول حل السؤال أولًا، ثم قارن حلك بالحل المقترح، وبعدها غيّر البيانات وأعد التمرين بصيغة مختلفة.

كم تمرينًا على القوائم يجب أن أحل؟

التنوع أهم من الرقم. ابدأ بالأساسيات ثم انتقل إلى الفلترة وList Comprehension والقوائم المتداخلة والمهام المركبة.

هل يجب أن يكون حلي مطابقًا للحل الموجود؟

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

ما الفرق بين append وextend؟

append() تضيف عنصرًا واحدًا كما هو، بينما extend() تضيف عناصر iterable واحدًا واحدًا.

ما الفرق بين sort وsorted؟

sort() تعدّل القائمة الأصلية وترجع None، بينما sorted() تعيد قائمة مرتبة جديدة.

كيف أنسخ List بدون ربط القائمتين ببعض؟

استخدم list.copy() أو Slicing مثل list[:] للنسخة السطحية، بدل list2 = list1.

إرسال تعليق

أحدث أقدم