بسم الله الرحمن الرحيم
اللهم علّمنا ما ينفعنا وانفعنا بما علّمتنا إنك أنت العليم الحكيم
سنتحدث في هذا الدرس عن القوائم (Lists) بشكل مفصل وكل ما يدور حولها.
القوائم (Lists) في لغة البرمجة بايثون هي أحد أهم وأشهر هياكل البيانات التي تتيح للمبرمجين تخزين مجموعات من البيانات بمرونة وسهولة. تعتبر القوائم أداة قوية لأنها تسمح بتخزين أنواع متعددة من البيانات، سواء كانت أرقام، نصوص، أو حتى قوائم أخرى. ولا يلزم أن يكون هناك علاقة بين عناصر هذه القائمة لأنها تحتوي بالعادة على على عناصر كثيرة. بالإضافة إلى ذلك، تتميز القوائم بقدرتها على تغيير محتوياتها بعد إنشائها، مما يجعلها مثالية للاستخدام في سيناريوهات متعددة مثل معالجة البيانات، البرمجة الديناميكية، وحل المشكلات المختلفة.
في لغة بايثون يتم التعبير عن القائمة من خلال الـ Sequare Brackets [ ] ويتم وضع العناصر بداخلها. كما أنه يتم الفصل بين هذه العناصر عن طريق الـ Comma. كما في المثال التالي:
إذا طلبت من بايثون أنه يطبع لك القائمة كما في المثال السابق, فسوف تعرض لك القائمة كما هي بما في ذلك الأقواس كما يلي:
ولأن هذا ليس هو الناتج التي تريد أن يراه المستخدم. دعنا نتعلم سويًا كيفية الوصول إلى عنصر محدد داخل القائمة.
إليك مثالًا واقعيًا يوضح كيفية استخدام القوائم في بايثون لتنظيم ومعالجة البيانات. لنفترض أنك تعمل على تطبيق لتسجيل درجات الطلاب في مادة معينة، وتحتاج إلى تخزين هذه الدرجات ثم حساب المعدل وإجراء بعض العمليات الأخرى.
في البداية يتم تخزين درجات الطلاب في قائمة. ثم يقوم حساب المتوسط ( المعدل) باستخدام دالة sum() لحساب مجموع الدرجات و len() لحساب عدد الدرجات. بعد ذلك قام بإضافة درجة جديدة إلى القائمة باستخدام دالة append() . ومن ثم باستخدام دالة remove()قام بحذف درجة معينة. وليقوم بحساب أعلى وأدنى درجة استخدام دالتي max() و min() .وأخيرًا قام بترتيب الدرجات تصاعديًا باستخدام دالة sort(). ويكون الناتج كما يلي:
اللهم علّمنا ما ينفعنا وانفعنا بما علّمتنا إنك أنت العليم الحكيم
سنتحدث في هذا الدرس عن القوائم (Lists) بشكل مفصل وكل ما يدور حولها.
القوائم (Lists) في لغة البرمجة بايثون هي أحد أهم وأشهر هياكل البيانات التي تتيح للمبرمجين تخزين مجموعات من البيانات بمرونة وسهولة. تعتبر القوائم أداة قوية لأنها تسمح بتخزين أنواع متعددة من البيانات، سواء كانت أرقام، نصوص، أو حتى قوائم أخرى. ولا يلزم أن يكون هناك علاقة بين عناصر هذه القائمة لأنها تحتوي بالعادة على على عناصر كثيرة. بالإضافة إلى ذلك، تتميز القوائم بقدرتها على تغيير محتوياتها بعد إنشائها، مما يجعلها مثالية للاستخدام في سيناريوهات متعددة مثل معالجة البيانات، البرمجة الديناميكية، وحل المشكلات المختلفة.
في لغة بايثون يتم التعبير عن القائمة من خلال الـ Sequare Brackets [ ] ويتم وضع العناصر بداخلها. كما أنه يتم الفصل بين هذه العناصر عن طريق الـ Comma. كما في المثال التالي:
Python:
Letters =['A', 'B', 'C' ,'D' ,'E']
print(Letters)
إذا طلبت من بايثون أنه يطبع لك القائمة كما في المثال السابق, فسوف تعرض لك القائمة كما هي بما في ذلك الأقواس كما يلي:
Python:
['A', 'B' ,'C' ,'D' ,'E' ]
ولأن هذا ليس هو الناتج التي تريد أن يراه المستخدم. دعنا نتعلم سويًا كيفية الوصول إلى عنصر محدد داخل القائمة.
إليك مثالًا واقعيًا يوضح كيفية استخدام القوائم في بايثون لتنظيم ومعالجة البيانات. لنفترض أنك تعمل على تطبيق لتسجيل درجات الطلاب في مادة معينة، وتحتاج إلى تخزين هذه الدرجات ثم حساب المعدل وإجراء بعض العمليات الأخرى.
Python:
# A list containing student grades
grades = [85, 90, 78, 92, 88, 76, 95]
# Calculate the average of the grades
average = sum(grades) / len(grades)
print("Student grades:", grades)
print("Average grade:", average)
# Add a new student's grade
grades.append(80)
print("Grades after adding a new grade:", grades)
# Remove a specific grade (for example, remove grade 76)
grades.remove(76)
print("Grades after removing a grade:", grades)
# Find the highest and lowest grades
highest_grade = max(grades)
lowest_grade = min(grades)
print("Highest grade:", highest_grade)
print("Lowest grade:", lowest_grade)
# Sort the grades in ascending order
grades.sort()
print("Grades after sorting:", grades)
في البداية يتم تخزين درجات الطلاب في قائمة. ثم يقوم حساب المتوسط ( المعدل) باستخدام دالة sum() لحساب مجموع الدرجات و len() لحساب عدد الدرجات. بعد ذلك قام بإضافة درجة جديدة إلى القائمة باستخدام دالة append() . ومن ثم باستخدام دالة remove()قام بحذف درجة معينة. وليقوم بحساب أعلى وأدنى درجة استخدام دالتي max() و min() .وأخيرًا قام بترتيب الدرجات تصاعديًا باستخدام دالة sort(). ويكون الناتج كما يلي:
Python:
Student grades: [85, 90, 78, 92, 88, 76, 95]
Average grade: 86.28571428571429
Grades after adding a new grade: [85, 90, 78, 92, 88, 76, 95, 80]
Grades after removing a grade: [85, 90, 78, 92, 88, 95, 80]
Highest grade: 95
Lowest grade: 78
Grades after sorting: [78, 80, 85, 88, 90, 92, 95]
العمليات الأساسية على القوائم:

كما تحدثنا أن القائمة هي عبارة عن مجموعة من العناصر المرتبة. لذلك يمكننا الوصول إلى أي عنصر في هذه القائمة عن طريق موقع هذا العنصر (Index). بالتالي للوصول إلى أي عنصر علينا كتابة اسم القائمة ثم نتبعها وأقواس تحتوي على موقع هذا العنصر, كما في المثال:
Python:
my_list = [10, 20, 30]
print(my_list[1])
وتكون نتيجة الكود كالتالي:
Python:
20
في لغة بايثون يوجد رمز خاص للوصول إلى آخر عنصر في القائمة وهو (-1) والعنصر ما قبل الأخير (2-) وهكذا...
الجدول التالي يوضح قائمة مكونة من 5 عناصر وموقع كل عنصر بالطريقة التقليدية أو باستخدام رمز خاص:
العنصر الخامس | العنصر الرابع | العنصر الثالث | العنصر الثاني | العنصر الأول | العناصر |
4 | 3 | 2 | 1 | 0 | موقع العنصر بالطريقة التقليدية |
1- | 2- | 3- | 4- | 5- | موقع العنصر باستخدام الرمز الخاص |
وهذا مثال لتوضيح الفكرة بشكل أكثر:
Python:
my_list = [10, 20, 30]
print(my_list[-2])
وتكون النتيجة كالتالي:
Python:
20

يمكن إضافة عنصر جديد إلى القائمة سواء بنهايتها أو في أي مكان معين.
لإضافة عنصر في نهاية القائمة نستخدم الدالة (Append) , كما في المثال التالي:
Python:
my_list = [1, 2, 3]
my_list.append(4)
باستخدام هذه الدالة أصبح شكل القائمة كالتالي:
Python:
my_list = [1, 2, 3, 4]
أما لإضافة مجموعة من العناصر على نهاية القائمة نستخدم الدالة extend , كما في المثال التالي:
Python:
fruits = ["apple", "banana"]
more_fruits = ["cherry", "orange"]
fruits.extend(more_fruits)
print(fruits)
ويكون الناتج كالتالي:
Python:
['apple', 'banana', 'cherry', 'orange']
أما لإضافة عنصر في أي موقع في القائمة, نستخدم دالة insert , كما في المثال التالي:
Python:
my_list = [1, 2, 3]
my_list.insert(1, 10)
هنا سيتم إضافة الرقم 10 في الموقع 1 ويسبب ذلك إزاحة للعناصر الموجودة في هذا الموقع فما بعد, ويصبح شكل القائمة كالتالي:
Python:
my_list = [1, 10, 2, 3]

يمكننا التعديل على قيمة عنصر معين داخل القائمة نستخدم اسم القائمة ثم نتبعها بالموقع الخاص بالعنصر المراد التعديل عليه وبعد ذلك نضع القيمة الجديدة فيه, كما في المثال التالي:
Python:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
بعد التعديل على القائمة يصبح شكلها كالتالي:
Python:
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']

يمكنك حذف عنصر من القائمة بعدة طرق ,منها ما يلي:
لحذف عنصر من القائمة بناءًا على قيمة يحددها المستخدم ضمن القائمة , نستخدم الدالة remove , كما في المثال التالي:
Python:
fruits = ["apple", "banana", "cherry"]
fruits.remove("banana")
print(fruits)
ويكون الناتج كالتالي:
Python:
['apple', 'cherry']
في حال تكرر العنصر أكثر من مرة داخل القائمة تقوم الدالة remove بحذف الظهور الأول للقيمة التي يحددها المستخدم. بالتالي إذا كان هناك احتمال لظهور القيمة أكثر من مرة في القائمة فتحتاج إلى استخدام حلقة للتأكد من أن جميع التكرارات تم حذفها.
يمكن استخدام الدالة remove للعمل مع القيمة التي تم إزالتها من القائمة.
لحذف عنصر محدد من قبل المستخدم بناءًا على موقعه مع الاحتفاظ بقيمته, نستخدم الدالة POP كما في المثال التالي:
Python:
fruits = ["apple", "banana", "cherry"]
removed_fruit = fruits.pop(1)
print(removed_fruit)
print(fruits)
ويكون الناتج كالتالي:
Python:
['apple', 'cherry']
إذا لم يتم إعطاء أي موقع للدالة pop يتم بشكل افتراضي حذف العنصر الأخير من القائمة.
لحذف جميع عناصر القائمة , نستخدم الدالة clear كما في المثال التالي:
Python:
fruits = ["apple", "banana", "cherry"]
fruits.clear()
print(fruits)
ويكون الناتج كالتالي:
Python:
[ ]

هذه الطريقة تفرض علينا معرفة موقع العنصر الذي نريد حذفه من القائمة بحيث يمكننا استخدامها كالتالي:
Python:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)
بعد استخدام هذه الطريقة يصبح شكل القائمة كالتالي:
Python:
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']
أما في حال عدم معرفة موقع العنصر ومعرفة العنصر نفسه يمكننا استخدام الدالة index لتحديد موقع العنصر ضمن القائمة ومن قم استخدام طريقة الـ del , كما في المثال التالي:
Python:
fruits = ["apple", "banana", "cherry"]
index = fruits.index("banana")
print(index)
ويكون الناتج كالتالي:
Python:
1

يمكن ترتيب القائمة باستخدام الدالة sort بحيث أن هذه الدالة تقوم بترتيب القائمة بشكل دائم ولا يمكن إعادة الترتيب الأصلي للقائمة. ويكون الترتيب بشكل تصاعدي.كما في المثال التالي:
Python:
numbers = [4, 2, 9, 1]
numbers.sort()
print(numbers)
وهكذا يكون الناتج:
Python:
[1, 2, 4, 9]
يمكن ترتيب القائمة باستخدام الدالة sorted بحيث أن هذه الدالة تقوم بترتيب القائمة بشكل مؤقت ويمكن إعادة الترتيب الأصلي للقائمة. ويكون الترتيب بشكل تصاعدي.كما في المثال التالي:
Python:
numbers = [4, 2, 9, 1]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
print(numbers)
ويكون الناتج كالتالي:
Python:
[1, 2, 4, 9]
[4, 2, 9, 1]
في حال أردنا قلب ترتيب عناصر القائمة نستخدم الدالة reverse , كما في المثال التالي:
Python:
numbers = [1, 2, 3, 4]
numbers.reverse()
print(numbers)
ويكون الناتج كالتالي:
Python:
[4, 3, 2, 1]
ويمكننا أيضًا عكس الترتيب عن طريق تمرير الأمر reverse=True إلى الدالة sort أو sorted , كما في المثال التالي:
Python:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
وتظهر النتيجة كالتالي:
Python:
['toyota', 'subaru', 'bmw', 'audi']
وبهذا نكون قد وصلنا إلى نهاية درسنا لهذا اليوم, أتمنى أن تكونوا قد استفدتم.
دُمتم بحفظ الله ورعايته