فهم القوائم في Python 3

المقدمة

A list is a data structure in Python that is a mutable, or changeable, ordered sequence of elements. Each element or value that is inside of a list is called an item. Just as strings are defined as characters between quotes, lists are defined by having values between square brackets [ ].

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

عند التفكير في قوائم Python وهياكل البيانات الأخرى التي هي أنواع من المجموعات، من المفيد النظر في جميع المجموعات المختلفة التي تملكها على جهاز الكمبيوتر الخاص بك: مجموعتك من الملفات، وقوائم تشغيل الأغاني، وعلامات التبويب في المتصفح الخاص بك، ورسائل البريد الإلكتروني الخاصة بك، ومجموعة الفيديوهات التي يمكنك الوصول إليها على خدمة البث، وأكثر من ذلك.

المتطلبات الأولية

يجب أن يكون لديك Python 3 مثبتًا وبيئة برمجية مهيأة على جهاز الكمبيوتر الخاص بك أو الخادم. إذا لم يكن لديك بيئة برمجية مهيأة، يمكنك الرجوع إلى دليل التثبيت والإعداد لـبيئة برمجية محلية أو لـبيئة برمجية على خادمك مناسبة لنظام التشغيل الخاص بك (Ubuntu، CentOS، Debian، إلخ).

قوائم السلاسل

للبدء، دعنا ننشئ قائمة تحتوي على عناصر من نوع بيانات السلسلة:

معلومات: لمتابعة الشفرة المثالية في هذا البرنامج التعليمي، افتح محطة تفاعلية لغة Python على نظامك المحلي عن طريق تشغيل الأمر python3. بعد ذلك يمكنك نسخ، لصق، أو تحرير الأمثلة عن طريق إضافتها بعد علامة الأمر >>>.

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

عندما نقوم بطباعة القائمة، يستجيب الإخراج بالضبط مثل القائمة التي أنشأناها:

print(sea_creatures)
Output
['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

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

في هذا البرنامج التعليمي، سنتناول بعض الطرق التي يمكننا من خلالها العمل مع القوائم في لغة Python.

فهرسة القوائم

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

بالنسبة لقائمة sea_creatures، يبدو تفصيل الفهرس على النحو التالي:

‘shark’ ‘cuttlefish’ ‘squid’ ‘mantis shrimp’ ‘anemone’
0 1 2 3 4

العنصر الأول، السلسلة 'shark' تبدأ في الفهرس 0، وينتهي القائمة في الفهرس 4 بالعنصر 'anemone'.

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

الآن يمكننا استدعاء عنصر من القائمة عن طريق الإشارة إلى رقم فهرسه:

print(sea_creatures[1])
Output
cuttlefish

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

sea_creatures[0] = 'shark'
sea_creatures[1] = 'cuttlefish'
sea_creatures[2] = 'squid'
sea_creatures[3] = 'mantis shrimp'
sea_creatures[4] = 'anemone'

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

print(sea_creatures[18])
Output
IndexError: list index out of range

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

بالنسبة لنفس القائمة sea_creatures، يظهر تفكيك الفهرس السالب بهذا الشكل:

‘shark’ ‘cuttlefish’ ‘squid’ ‘mantis shrimp’ ‘anemone’
-5 -4 -3 -2 -1

لذا، إذا أردنا طباعة العنصر 'squid' باستخدام رقم فهرسه السالب، يمكننا القيام بذلك بهذه الطريقة:

print(sea_creatures[-3])
Output
squid

يمكننا دمج عناصر السلاسل في قائمة مع سلاسل أخرى باستخدام عامل الجمع +.

print('Sammy is a ' + sea_creatures[0])
Output
Sammy is a shark

تمكنا من دمج عنصر السلسلة في الفهرس رقم 0 مع السلسلة 'سامي هو '. يمكننا أيضًا استخدام عامل + ل دمج 2 أو أكثر من القوائم معًا.

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

تعديل العناصر في القوائم

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

إذا كنا نرغب في تغيير قيمة السلسلة للعنصر في الفهرس 1 من 'أخطبوط' إلى 'خنفساء'، يمكننا القيام بذلك بهذه الطريقة:

sea_creatures[1] = 'octopus'

الآن عندما نقوم بطباعة مخلوقات البحر، ستكون القائمة مختلفة:

print(sea_creatures)
Output
['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']

يمكننا أيضًا تغيير قيمة عنصر باستخدام رقم فهرس سلبي بدلاً من ذلك:

sea_creatures[-3] = 'blobfish'
print(sea_creatures)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']

الآن قد استبدل 'سمكة النفايات' 'الحبار' في الفهرس السلبي -3 (الذي يتوافق مع الفهرس الإيجابي 2).

القدرة على تعديل العناصر في القوائم تمنحنا القدرة على تغيير وتحديث القوائم بطريقة فعالة.

تقسيم القوائم

يمكننا أيضًا استدعاء عدة عناصر من القائمة. لنفترض أننا نرغب في طباعة العناصر الوسطى فقط من sea_creatures، يمكننا القيام بذلك عن طريق إنشاء قطعة. باستخدام القطع، يمكننا استدعاء قيم متعددة عن طريق إنشاء نطاق من أرقام الفهرس مفصولة بفاصلة [x:y]:

print(sea_creatures[1:4])
Output
['octopus', 'blobfish', 'mantis shrimp']

عند إنشاء قطعة، كما هو الحال في [1:4]، يكون الرقم الأول في الفهرس هو موضع بداية القطعة (شامل)، والرقم الثاني في الفهرس هو موضع نهاية القطعة (غير شامل)، ولهذا السبب في مثالنا أعلاه، العناصر في المواقع 1، 2، و 3 هي العناصر التي يتم طباعتها.

إذا كنا نرغب في تضمين أحد طرفي القائمة، يمكننا حذف أحد الأرقام في بنية list[x:y]. على سبيل المثال، إذا كنا نريد طباعة أول 3 عناصر من القائمة sea_creatures — والتي تكون 'shark'، 'octopus'، 'blobfish' — يمكننا القيام بذلك عن طريق كتابة:

print(sea_creatures[:3])
Output
['shark', 'octopus', 'blobfish']

تم طباعة بداية القائمة، متوقفة مباشرة قبل الفهرس 3.

لتضمين جميع العناصر في نهاية القائمة، يجب علينا عكس الصيغة:

print(sea_creatures[2:])
Output
['blobfish', 'mantis shrimp', 'anemone']

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

print(sea_creatures[-4:-2])
print(sea_creatures[-3:])
Output
['octopus', 'blobfish'] ['blobfish', 'mantis shrimp', 'anemone']

آخر معامل يمكننا استخدامه مع التقطيع يُسمى stride، والذي يشير إلى عدد العناصر للتقدم بعد استرداد العنصر الأول من القائمة. حتى الآن، لقد تم حذف معامل الstride، ويفترض Python أن قيمة الstride هي 1، بحيث يتم استرداد كل عنصر بين رقمي فهرس بخطوة 1.

بناء الجملة لهذا البناء هو list[x:y:z]، حيث يُشير z إلى الstride. دعونا ننشئ قائمة أكبر، ثم نقوم بتقطيعها، ونُعطي للstride قيمة 2:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

print(numbers[1:11:2])
Output
[1, 3, 5, 7, 9]

بناءنا numbers[1:11:2] يطبع القيم بين الفهرسين المتضمنين 1 وحصريًا 11، ثم قيمة الstride التي هي 2 تخبر البرنامج بطباعة كل عنصر آخر.

يمكننا حذف المعاملين الأولين واستخدام الstride بمفرده كمعامل بالصيغة list[::z]:

print(numbers[::3])
Output
[0, 3, 6, 9, 12]

بطباعة القائمة numbers مع الstride المحددة إلى 3، يتم طباعة كل عنصر ثالث فقط:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

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

تعديل القوائم بالمشغلات

يمكن استخدام المشغلات لإجراء تعديلات على القوائم. سنراجع استخدام المشغلات + و * وشكليهما المركبين += و *=.

يمكن استخدام المشغل + لدمج قائمتين أو أكثر معًا:

sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
oceans = ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

print(sea_creatures + oceans)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

بسبب أن المشغل + يمكنه الدمج، يمكن استخدامه لإضافة عنصر (أو عدة عناصر) في شكل قائمة إلى نهاية قائمة أخرى. تذكر وضع العنصر بين قوسين مربعين:

sea_creatures = sea_creatures + ['yeti crab']
print (sea_creatures)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

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

لنضرب قائمة sea_creatures بمقدار 2 وقائمة oceans بمقدار 3:

print(sea_creatures * 2)
print(oceans * 3)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab'] ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

من خلال استخدام المشغل * يمكننا تكرار قوائمنا بالعدد الذي نحدده.

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

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

for x in range(1,4):
    sea_creatures += ['fish']
    print(sea_creatures)
Output
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish'] ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish'] ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish', 'fish']

في كل تكرار لحلقة الـ for، يتم إضافة عنصر قائمة إضافي من ‘ 'fish' ‘ إلى القائمة الأصلية sea_creatures .

العامل *= يتصرف بنفس الطريقة:

sharks = ['shark']

for x in range(1,4):
    sharks *= 2
    print(sharks)
Output
['shark', 'shark'] ['shark', 'shark', 'shark', 'shark'] ['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']

يمكن استخدام العمليات + و * لدمج القوائم وضربها. يمكن للعمليات المركبة += و *= دمج القوائم وضربها وتمرير الهوية الجديدة إلى القائمة الأصلية.

إزالة عنصر من قائمة

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

من قائمة sea_creatures ، دعنا نزيل العنصر 'octopus' . هذا العنصر موجود في موقع الفهرس 1 . لإزالة العنصر، سنستخدم التعليمة del ثم استدعاء متغير القائمة ورقم الفهرس لهذا العنصر:

sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

del sea_creatures[1]
print(sea_creatures)
Output
['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

الآن العنصر في موقع الفهرس 1 ، سلسلة 'octopus' ، لم يعد في قائمتنا sea_creatures .

يمكننا أيضًا تحديد نطاق باستخدام التعليمة del . فلنفترض أننا نريد إزالة ليس فقط العنصر 'octopus' ، ولكن أيضًا 'blobfish' و 'mantis shrimp' أيضًا. يمكننا استدعاء نطاق في sea_creatures باستخدام التعليمة del لتحقيق ذلك:

sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

del sea_creatures[1:4]
print(sea_creatures)
Output
['shark', 'anemone', 'yeti crab']

باستخدام نطاق مع البيان del، تمكنا من إزالة العناصر بين رقم المؤشر 1 (شامل) ورقم المؤشر 4 (غير شامل)، مما ترك لنا قائمة تحتوي على 3 عناصر بعد إزالة 3 عناصر.

البيان del يسمح لنا بإزالة عناصر محددة من نوع بيانات القائمة.

بناء قائمة باستخدام عناصر القائمة

يمكن تعريف القوائم بعناصر تتألف من قوائم، حيث توضع كل قائمة محاطة بقوسين أكبر من قائمة الأب:

sea_names = [['shark', 'octopus', 'squid', 'mantis shrimp'],['Sammy', 'Jesse', 'Drew', 'Jamie']]

تُسمى هذه القوائم داخل القوائم باسم القوائم المتداخلة.

للوصول إلى عنصر داخل هذه القائمة، سنحتاج إلى استخدام مؤشرات متعددة:

print(sea_names[1][0])
print(sea_names[0][0])
Output
Sammy shark

ستكون القائمة الأولى، نظرًا لأنها تساوي عنصرًا، لها رقم المؤشر 0، والذي سيكون العدد الأول في البناء، وستكون القائمة الثانية لها رقم المؤشر 1. ضمن كل قائمة داخلية متداخلة ستكون هناك أرقام مؤشرات منفصلة، سنستدعيها في الرقم المؤشر الثاني:

sea_names[0][0] = 'shark'
sea_names[0][1] = 'octopus'
sea_names[0][2] = 'squid'
sea_names[0][3] = 'mantis shrimp'

sea_names[1][0] = 'Sammy'
sea_names[1][1] = 'Jesse'
sea_names[1][2] = 'Drew'
sea_names[1][3] = 'Jamie'

عند العمل مع القوائم المتداخلة، من المهم أن تتذكر أنه ستحتاج إلى الرجوع إلى أكثر من رقم مؤشر من أجل الوصول إلى عناصر محددة داخل القائمة المتداخلة ذات الصلة.

الاستنتاج

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

يمكنك الآن معرفة المزيد حول العمل مع القوائم في بايثون من خلال قراءة “كيفية استخدام أساليب القوائم”، وحول التعبيرات القائمة لإنشاء قوائم استنادًا إلى القوائم الحالية. لمعرفة المزيد عن أنواع البيانات بشكل عام يمكنك قراءة دورتنا التعليمية “فهم أنواع البيانات”.

Source:
https://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3