يتضمّن بايثون عددًا من هياكل البيانات، بما في ذلك القوائم. تمكّن هياكل البيانات من تنظيم البيانات وتخزينها عبر توابع خاصة مُضمّنة في بايثون.
للاستفادة من محتويات هذه المقالة، ينبغي أن تكون على إلمام بأساسيات القوائم، وصياغتها وكيفية فهرستها. يمكنك تعلم ذلك من المقالة السابقة: القوائم في بايثون 3.
سنتعرف على التوابع المُضمنة التي يمكن استخدامها مع القوائم. ونتعلم كيفية إضافة عناصر إلى القائمة وكيفية إزالتها، وتوسيع القوائم وترتيبها، وغير ذلك.
القوائم أنواعٌ قابلةٌ للتغيير (mutable) على عكس السلاسل النصية التي لا يمكن تغييرها، فعندما تستخدم تابعًا على قائمة ما، ستؤثر في القائمة نفسها، وليس في نسخة منها.
سنعمل في هذه المقالة على قائمة تمثل حوض سمك، إذ ستحوي القائمة أسماء أنواع الأسماك الموجودة في الحوض، وسنعدلها كلما أضفنا أسماكًا أو أزلناها من الحوض.
التابع list.append()
يضيف التابع list.append(x)
عنصرًا (x
) إلى نهاية القائمة. يُعرّف المثال التالي قائمةً تمثل الأسماك الموجودة في حوض السمك.
fish = ['barracuda','cod','devil ray','eel']
تتألف هذه القائمة من 4 سلاسل نصية، وتتراوح فهارسها من 0
إلى 3
.
سنضيف سمكة جديدة إلى الحوض، ونود بالمقابل أن نضيف تلك السمكة إلى قائمتنا. سنمرّر السلسلة النصية flounder
التي تمثل نوع السمكة الجديدة إلى التابع list.append()
، ثم نطبع قائمتنا المعدلة لتأكيد إضافة العنصر.
fish.append('flounder') print(fish) # ['barracuda', 'cod', 'devil ray', 'eel', 'flounder']
الآن، صارت لدينا قائمة من 5 عناصر، تنتهي بالعنصر الذي أضفناه للتو عبر التابع append()
.
التابع list.insert()
يأخذ التابع list.insert (i,x)
وسيطين: الأول i
يمثِّل الفهرس الذي ترغب في إضافة العنصر عنده، و x
يمثل العنصر نفسه.
لقد أضفنا إلى حوض السمك سمكة جديدة من نوع anchovy
. ربما لاحظت أنّ قائمة الأسماك مرتبة ترتيبًا أبجديًا حتى الآن. لهذا السبب لا نريد إفساد الترتيب، لذا لن نضيف السلسلة النصية anchovy
إلى نهاية القائمة باستخدام الدالة list.append()
. بدلًا من ذلك، سنستخدم التابع list.insert()
لإضافة anchovy
إلى بداية القائمة، أي عند الفهرس 0
:
fish.insert(0,'anchovy') print(fish) # ['anchovy', 'barracuda', 'cod', 'devil ray', 'eel', 'flounder']
في هذه الحالة، أضفنا العنصر إلى بداية القائمة. ستتقدم فهارس العناصر التالية خطوةً واحدةً إلى الأمام. لذلك، سيصبح العنصر barracuda
عند الفهرس 1
، والعنصر cod
عند الفهرس 2
، والعنصر flounder
- الأخير - عند الفهرس 5
.
سنحضر الآن سمكة من نوع damselfish
إلى الحوض، ونرغب في الحفاظ على الترتيب الأبجدي لعناصر القائمة أعلاه، لذلك سنضع هذا العنصر عند الفهرس 3
: fish.insert(3,'damselfish')
.
التابع list.extend()
إذا أردت أن توسّع قائمة بعناصر قائمة أخرى، فيمكنك استخدام التابع list.extend(L)
، والذي يأخذ قائمة كمعامل.
سنضع في الحوض أربعة أسماك جديدة. أنواع هذه الأسماك مجموعة معًا في القائمة more_fish
:
more_fish = ['goby','herring','ide','kissing gourami']
سنضيف الآن عناصر القائمة more_fish
إلى قائمة الأسماك، ونطبع القائمة لنتأكد من أنّ عناصر القائمة الثانية قد ضُمّت إليها:
fish.extend(more_fish) print(fish)
ستطبع بايثون القائمة التالية:
['anchovy', 'barracuda', 'cod', 'devil ray', 'eel', 'flounder', 'goby', 'herring', 'ide', 'kissing gourami']
في هذه المرحلة، صارت القائمة fish
تتألف من 10 عناصر.
التابع list.remove()
لإزالة عنصر من قائمة، استخدم التابع list.remove(x)
، والذي يزيل أول عنصر من القائمة له القيمة المُمرّرة x
.
جاءت مجموعة من العلماء المحليين لزيارة الحوض. سيجرون أبحاثًا عن النوع kissing gourami
، وطلبوا استعارة السمكة kissing gourami
، لذلك نود إزالة العنصر kissing gourami
من القائمة لنعكس هذا التغيير:
fish.remove('kissing gourami') print(fish)
والمخرجات ستكون:
['anchovy', 'barracuda', 'cod', 'devil ray', 'eel', 'flounder', 'goby', 'herring', 'ide']
بعد استخدام التابع list.remove()
، لم يعد العنصر kissing gourami
موجودًا في القائمة.
في حال مرّرت عنصرًا x
غير موجود في القائمة إلى التابع list.remove()
، فسيُطلق الخطأ التالي:
ValueError: list.remove(x): x not in list
التابع list.remove()
لن يزيل إلا أول عنصر تساوي قيمته قيمة العنصر المُمرّر إلى التابع، لذلك إن كانت لدينا سمكتان من النوع kissing gourami
في الحوض، وأعرنا إحداهما فقط للعلماء، فإنّ التعبير fish.remove('kissing gourami')
لن يمحو إلا العنصر الأول المطابق فقط.
التابع list.pop()
يعيد التابع list.pop ()
العنصر الموجود عند الفهرس المحدد من القائمة، ثم يزيل ذلك العنصر. تشير الأقواس المربعة حول i
إلى أنّ هذا المعامل اختياري، لذا، إذا لم تحدد فهرسًا (كما في fish.pop()
)، فسيُعاد العنصر الأخير ثم يُزال.
لقد أصبح حجم السمكة devil ray
كبيرًا جدًا، ولم يعد الحوض يسعها، ولحسن الحظ أنّ هناك حوض سمك في بلدة مجاورة يمكنه استيعابها. سنستخدم التابع .pop()
، ونمرر إليه العدد 3
، الذي يساوي فهرس العنصر devil ray
، بقصد إزالته من القائمة. بعد إعادة العنصر، سنتأكد من أننا أزلنا العنصر الصحيح.
print(fish.pop(3)) # devil ray print(fish) # ['anchovy', 'barracuda', 'cod', 'eel', 'flounder', 'goby', 'herring', 'ide']
باستخدام التابع .pop()
تمكّنا من إعادة وإزالة ray devil
من قائمة الأسماك.
إذا لم نمرر أيّ معامل إلى هذا التابع، ونفّذنا التعبير fish.pop()
، فسيُعاد العنصر الأخير ide
ثم يُزَال من القائمة.
التابع list.index()
يصعب في القوائم الكبيرة تحديد فهارس العناصر التي تحمل قيمة معينة. لأجل ذلك، يمكننا استخدام التابع list.index(x)
، حيث يمثل الوسيطx
قيمة العنصر المبحوث عنه، والذي نريد إعادة فهرسه. إذا كان هناك أكثر من عنصر واحد يحمل القيمة x
، فسيُعَاد فهرس العنصر الأول.
print(fish) # ['anchovy', 'barracuda', 'cod', 'eel', 'flounder', 'goby', 'herring', 'ide'] print(fish.index('herring')) # 6
سوف يُطلق خطأ في حال مرّرنا قيمة غير موجودة في القائمة إلى التابع .index()
.
التابع list.copy()
أحيانُا نرغب في تعديل عناصر قائمةٍ والتجريب عليها، مع الحفاظ على القائمة الأصلية دون تغيير؛ يمكننا في هذه الحالة استخدام التابع list.copy()
لإنشاء نسخة من القائمة الأصلية.
في المثال التالي، سنمرّر القيمة المعادة من fish.copy()
إلى المتغير fish_2
، ثم نطبع قيمة fish_2
للتأكد من أنها تحتوي على نفس عناصر القائمة fish
.
fish_2 = fish.copy() print(fish_2) # ['anchovy', 'barracuda', 'cod', 'eel', 'flounder', 'goby', 'herring', 'ide']
في هذه المرحلة، القائمتان fish
و fish_2
متساويتان.
التابع list.reverse()
يمكننا عكس ترتيب عناصر قائمة باستخدام التابع list.reverse()
. في المثال التالي سنستخدم التابع .reverse()
مع القائمة fish
لعكس ترتيب عناصرها.
fish.reverse() print(fish) # ['ide', 'herring', 'goby', 'flounder', 'eel', 'cod', 'barracuda', 'anchovy']
بعد استخدام التابع .reverse()
، صارت القائمة تبدأ بالعنصر ide
، والذي كان في نهاية القائمة من قبل، كما ستنتهي القائمة بالعنصر anchovy
، والذي كان في بداية القائمة من قبل.
التابع list.count()
يعيد التابع list.count(x)
عدد مرات ظهور القيمة x
في القائمة. هذا التابع مفيد في حال كنا نعمل على قائمة طويلة بها الكثير من القيم المتطابقة.
إذا كان حوض السمك كبيرًا، على سبيل المثال، وكانت عندنا عدة أسماك من النوع neon tetra
، فيمكننا استخدام التابع .count()
لتحديد العدد الإجمالي لأسماك هذا النوع.
في هذا المثال سنحسب عدد مرات ظهور العنصر goby
:
print(fish.count('goby')) # 1
تظهر السلسلة النصية goby
مرةً واحدةً فقط في القائمة، لذا سيُعيد التابع .count()
العدد 1
.
يمكننا استخدام هذا التابع أيضًا مع قائمة مكوَّنة من أعداد صحيحة. المثال التالي يوضح ذلك.
يتتبع المشرفون على الحوض أعمار الأسماك الموجودة فيه للتأكد من أنّ وجباتها الغذائية مناسبة لأعمارها. هذه القائمة الثانية المُسماة fish_ages
تتوافق مع أنواع السمك في القائمة fish
.
نظرًا لأنّ الأسماك التي لا يتجاوز عمرها عامًا واحدًا لها احتياجات غذائية خاصة، فسنحسب عدد الأسماك التي عمرها عامًا واحدًا:
fish_ages = [1,2,4,3,2,1,1,2] print(fish_ages.count(1)) # 3
يظهر العدد الصحيح 1
في القائمة fish_ages
ثلاث مرات، لذلك يعيد التابع
.count() العدد 3
.
التابع list.sort()
يُستخدم التابع list.sort()
لترتيب عناصر القائمة التي استُدعِي معها .
سنستخدم قائمة الأعداد الصحيحة fish_ages
لتجريب التابع .sort()
:
fish_ages.sort() print(fish_ages) # [1, 1, 1, 2, 2, 2, 3, 4]
باستدعاء التابع
.sort() مع القائمة fish_ages
، ستُعاد قائمة الأعداد الصحيحة مرتبةً.
التابع list.clear()
بعد الانتهاء من العمل على قائمة ما، يمكنك إزالة جميع القيم الموجودة فيها باستخدام التابع list.clear()
.
قررت الحكومة المحلية الاستيلاء على حوض السمك الخاص بنا، وجعله مساحة عامة يستمتع بها سكان مدينتنا. نظرًا لأننا لم نعد نعمل على الحوض، فلم نعد بحاجة إلى الاحتفاظ بقائمة الأسماك، لذلك سنزيل عناصر القائمة fish
:
fish.clear() print(fish) # []
نرى في المخرجات أقواسًا معقوفة نتيجة استدعاء التابع .clear()
على القائمة fish
، وهذا تأكيد على أنّ القائمة أصبحت خالية من جميع العناصر.
خلاصة
لمَّا كانت القوائم تسلسلات قابلة للتغيير (mutable)، فإنّها هياكلُ بيانات مرنة ومفيدة للغاية. كما تتيح لنا توابع القوائم إجراء العديد من العمليات على القوائم بسهولة، إذ يمكننا استخدام التوابع لتعديل القوائم وترتيبها ومعالجتها بفعالية.
هذه المقالة جزء من سلسة مقالات حول تعلم البرمجة في بايثون 3.
ترجمة -وبتصرّف- للمقال How To Use List Methods in Python 3 لصاحبته Lisa Tagliaferri
اقرأ أيضًا
- المقالة التالية: فهم كيفية استعمال List Comprehensions في بايثون 3
- المقالة السابقة: مدخل إلى القوائم في بايثون 3
- المرجع الشامل إلى تعلم لغة بايثون
- كتاب البرمجة بلغة بايثون
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.