مضى على الشبكة و يوم من العطاء.

الدرس الثامن: القوائم (Lists) - الجزء الأول

RTH

Developer

السمعة:

بسم الله الرحمن الرحيم
اللهم علّمنا ما ينفعنا وانفعنا بما علّمتنا إنك أنت العليم الحكيم

سنتحدث في هذا الدرس عن القوائم (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]

fa.webp
العمليات الأساسية على القوائم:

📍الوصول إلى العناصر:

كما تحدثنا أن القائمة هي عبارة عن مجموعة من العناصر المرتبة. لذلك يمكننا الوصول إلى أي عنصر في هذه القائمة عن طريق موقع هذا العنصر (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:
[ ]

🔰حذف عنصر باستخدام del statment:
هذه الطريقة تفرض علينا معرفة موقع العنصر الذي نريد حذفه من القائمة بحيث يمكننا استخدامها كالتالي:

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']

fa.webp


وبهذا نكون قد وصلنا إلى نهاية درسنا لهذا اليوم, أتمنى أن تكونوا قد استفدتم.


دُمتم بحفظ الله ورعايته
 
بسم الله ما شاء الله لا قوة الا بالله
موضوع رائع وشرح رائع بارك الله فيك

ننتظر جديد ابداعاتكم دائماً
 
  • Love
التفاعلات: RTH
بسم الله الرحمن الرحيم
اللهم علّمنا ما ينفعنا وانفعنا بما علّمتنا إنك أنت العليم الحكيم

سنتحدث في هذا الدرس عن القوائم (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]

مشاهدة المرفق 13949



📍الوصول إلى العناصر:

كما تحدثنا أن القائمة هي عبارة عن مجموعة من العناصر المرتبة. لذلك يمكننا الوصول إلى أي عنصر في هذه القائمة عن طريق موقع هذا العنصر (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:
[ ]

🔰حذف عنصر باستخدام del statment:
هذه الطريقة تفرض علينا معرفة موقع العنصر الذي نريد حذفه من القائمة بحيث يمكننا استخدامها كالتالي:

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']

مشاهدة المرفق 13949

وبهذا نكون قد وصلنا إلى نهاية درسنا لهذا اليوم, أتمنى أن تكونوا قد استفدتم.


دُمتم بحفظ الله ورعايته
بارك الله فيك ونفع بك
شرح رائع وواضح
 
  • Love
التفاعلات: RTH

آخر المشاركات

فانوس

رمضان
عودة
أعلى