دالة append() في بايثون: دليل شامل لإضافة العناصر إلى القوائم مع أمثلة عملية

دقائق القراءة: 7

أهلاً بك أيها المبرمج الطموح! إذا كنت تسعى لإتقان التعامل مع القوائم في لغة بايثون، فإن هذا المقال هو دليلك الشامل لاستكشاف إحدى أهم وأقوى دوالها: دالة append(). ستجد هذه الدالة ركيزة أساسية في مشاريعك البرمجية، وستمكنك من بناء تطبيقات أكثر ديناميكية ومرونة. في هذا الدليل المفصل، سنتناول النقاط التالية:

  • لماذا ومتى يجب استخدام دالة append().
  • كيفية استدعاء الدالة بشكل صحيح.
  • تأثيرها على القائمة وقيمتها المرتجعة.
  • كيف يمكن أن تكون مكافئة لدالة insert() وتقطيع القوائم (list slicing) ببعض الحالات الخاصة.
  • أمثلة عملية ومتنوعة لتطبيق دالة append() على أنواع بيانات مختلفة مثل السلاسل النصية، الأعداد الصحيحة، الأعداد العشرية، القيم المنطقية، القوائم، المجموعات (tuples)، والقواميس (dictionaries).

هيا بنا نبدأ رحلتنا في عالم بايثون!

الغرض من دالة append()

تُتيح لك هذه الدالة إضافة عنصر واحد فقط إلى نهاية قائمة موجودة. إنها طريقة فعالة لتوسيع القوائم ديناميكيًا أثناء تشغيل البرنامج. لفهم تأثيرها بشكل أفضل، إليك تمثيل مرئي يوضح كيفية عمل append():

رسم توضيحي يوضح إضافة عنصر جديد إلى نهاية قائمة بايثون باستخدام دالة append

💡 نصيحة هامة: إذا كنت بحاجة إلى إضافة تسلسل من العناصر الفردية (أي أكثر من عنصر واحد) إلى القائمة، فستحتاج إلى استخدام دالة extend() بدلاً من append().

البنية والمعاملات (Syntax & Parameters)

تتبع دالة append() بنية بسيطة ومباشرة لاستدعائها:

البنية الأساسية لاستدعاء دالة append في بايثون

💡 ملاحظة أساسية: النقطة (.) قبل append() حيوية للغاية؛ لأن append() هي دالة (method) مرتبطة بالكائنات. عند استدعاء دالة، نستخدم النقطة بعد اسم القائمة للإشارة إلى أننا نرغب في “تعديل” أو “التأثير على” تلك القائمة بعينها.

كما يتضح من البنية، تقبل دالة append() وسيطًا واحدًا فقط، وهو العنصر الذي ترغب في إضافته. يمكن أن يكون هذا العنصر من أي نوع بيانات متاح في بايثون، بما في ذلك على سبيل المثال لا الحصر:

  • Integer (عدد صحيح)
  • String (سلسلة نصية)
  • Float (عدد عشري)
  • Boolean (قيمة منطقية: True أو False)
  • قائمة أخرى (List)
  • مجموعة (Tuple)
  • قاموس (Dictionary)
  • كائن من فئة مخصصة (Instance of a custom class)

بشكل أساسي، أي قيمة يمكنك إنشاؤها في بايثون يمكن إضافتها إلى قائمة. العنصر الأول في البنية (القائمة نفسها) هو عادة متغير يشير إلى القائمة التي ستُعدَّل.

مثال توضيحي

لنلقِ نظرة على مثال بسيط يوضح كيفية استدعاء دالة append():

>>> musical_notes = [ "C" , "D" , "E" , "F" , "G" , "A" ]
>>> musical_notes.append( "B" )

في هذا المثال، قمنا أولاً بتعريف قائمة تسمى musical_notes تحتوي على بعض النوتات الموسيقية. بعد ذلك، استخدمنا هذا المتغير لاستدعاء دالة append()، ومررنا السلسلة النصية "B" كعنصر لإضافته إلى نهاية القائمة.

تأثير الدالة والقيمة المرتجعة (Effect & Return Value)

من المهم جداً فهم أن دالة append() تقوم بتعديل (mutate) القائمة الأصلية في الذاكرة مباشرةً. هذا يعني أنها لا تُرجع نسخة جديدة من القائمة مع العنصر المضاف، كما قد يظن البعض بشكل بديهي. بدلاً من ذلك، تُرجع الدالة القيمة None.

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

>>> musical_notes = [ "C" , "D" , "E" , "F" , "G" , "A" ]
>>> musical_notes.append( "B" )

بعد تنفيذ السطر الثاني، تم تعديل القائمة الأصلية musical_notes. أصبح العنصر الأخير فيها الآن هو "B"، وأصبحت القائمة هي النسخة المعدلة:

>>> musical_notes
['C', 'D', 'E', 'F', 'G', 'A', 'B']

يمكنك التأكد من أن القيمة المرتجعة لدالة append() هي None عن طريق تعيين هذه القيمة لمتغير ثم طباعته:

>>> musical_notes = [ "C" , "D" , "E" , "F" , "G" , "A" ]
>>> a = musical_notes.append( "B" )
>>> print(a)
None

أمثلة عملية على استخدام دالة append()

بعد أن تعرفنا على الغرض من دالة append()، وبنيتها، وتأثيرها على القوائم، حان الوقت لاستعراض بعض الأمثلة العملية التي توضح كيفية استخدامها مع أنواع بيانات مختلفة.

إضافة سلسلة نصية (String)

>>> top_players = [ "gino234" , "nor233" , "lal453" ]
>>> top_players.append( "auop342" ) # تم إضافة السلسلة النصية
>>> top_players
['gino234', 'nor233', 'lal453', 'auop342']

إضافة عدد صحيح (Integer)

>>> data = [ 435 , 324 , 275 , 567 , 123 ]
>>> data.append( 456 )
>>> data
[435, 324, 275, 567, 123, 456]

إضافة عدد عشري (Float)

>>> data = [ 435.34 , 324.35 , 275.45 , 567.34 , 123.23 ]
>>> data.append( 456.23 )
>>> data
[435.34, 324.35, 275.45, 567.34, 123.23, 456.23]

إضافة قيمة منطقية (Boolean)

>>> values = [ True , True , False , True ]
>>> values.append( False )
>>> values
[True, True, False, True, False]

إضافة قائمة (List)

تذكر أن دالة append() تضيف عنصرًا واحدًا فقط إلى نهاية القائمة. لذا، إذا قمت بتمرير قائمة كاملة كوسيط، فسيتم إضافة هذه القائمة بأكملها كعنصر واحد إلى القائمة الأصلية، مما يؤدي إلى إنشاء قائمة متداخلة (nested list).

>>> data = [[ 4.5 , 4.8 , 5.7 ], [ 2.5 , 2.6 , 2.7 ]]
>>> data.append([ 6.7 , 2.3 ])
>>> data
[[4.5, 4.8, 5.7], [2.5, 2.6, 2.7], [6.7, 2.3]]

إضافة مجموعة (Tuple)

ينطبق الأمر نفسه تمامًا على المجموعات (tuples)؛ سيتم إضافة المجموعة بأكملها كعنصر واحد إلى القائمة الأصلية.

>>> data = [[ 4.5 , 4.8 , 5.7 ], [ 2.5 , 2.6 , 2.7 ]]
>>> data.append(( 6.7 , 2.3 ))
>>> data
[[4.5, 4.8, 5.7], [2.5, 2.6, 2.7], (6.7, 2.3)]

💡 نصيحة هامة: إذا كنت بحاجة إلى إضافة عناصر قائمة أو مجموعة كعناصر فردية منفصلة إلى القائمة الأصلية، فيجب عليك استخدام دالة extend() بدلاً من append(). هذا يضمن دمج العناصر بدلاً من إضافتها ككيان واحد.

إضافة قاموس (Dictionary)

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

>>> data = [{ "a" : 1 , "b" : 2 }]
>>> data.append({ "c" : 3 , "d" : 4 })
>>> data
[{'a': 1, 'b': 2}, {'c': 3, 'd': 4}]

تكافؤ دالة append() مع دالة insert()

من المثير للاهتمام معرفة أن دالة insert() يمكن أن تحقق نفس نتيجة دالة append() إذا تم تمرير الوسائط الصحيحة لها. تُستخدم دالة insert() لإدراج عنصر في فهرس (موقع) محدد داخل القائمة. هذه هي البنية العامة لاستدعاء دالة insert():

البنية العامة لدالة insert في بايثون

لجعلها مكافئة لدالة append()، يجب أن تكون قيمة الفهرس (index) هي طول القائمة (len())، وذلك لأننا نرغب في إضافة العنصر كآخر عنصر في القائمة.

إليك مثال يوضح أن استخدام insert() بهذه الوسائط يعطي نفس نتيجة append():

>>> musical_notes = [ "C" , "D" , "E" , "F" , "G" , "A" ]
>>> musical_notes.insert(len(musical_notes), "B" )
>>> musical_notes
['C', 'D', 'E', 'F', 'G', 'A', 'B']

على الرغم من هذا التكافؤ، فإن دالة append() أكثر إيجازًا وعملية بكثير لهذا الغرض، ولذلك يُوصى عادةً باستخدامها عند الرغبة في إضافة عنصر إلى نهاية القائمة.

تكافؤ دالة append() مع تقطيع القوائم (List Slicing)

توجد أيضًا طريقة أخرى مثيرة للاهتمام لتحقيق نفس وظيفة append() باستخدام تقطيع القوائم (list slicing). هذه البنية تقوم أساسًا بتعيين قائمة تحتوي على العنصر المراد إضافته (مثل [<elem>]) كالجزء الأخير من القائمة الأصلية.

رسم توضيحي يوضح تكافؤ دالة append وتقطيع القوائم في بايثون

إليك مثال يوضح أن النتيجة مكافئة تمامًا لاستخدام append():

>>> musical_notes = [ "C" , "D" , "E" , "F" , "G" , "A" ]
>>> musical_notes[len(musical_notes):] = [ "B" ]
>>> musical_notes
['C', 'D', 'E', 'F', 'G', 'A', 'B']

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

الخلاصة التقنية

في هذا المقال، استعرضنا دالة append() في بايثون بتعمق، بدءًا من غرضها الأساسي في إضافة عنصر واحد إلى نهاية القائمة، مرورًا ببنيتها البسيطة، وصولاً إلى فهم تأثيرها المباشر على القائمة الأصلية وقيمتها المرتجعة None. كما تطرقنا إلى أمثلة عملية متعددة لأنواع البيانات المختلفة، وأوضحنا الفروقات الدقيقة عند إضافة قوائم أو مجموعات أو قواميس كعناصر فردية. أخيرًا، ناقشنا بعض البدائل المثيرة للاهتمام مثل دالة insert() وتقطيع القوائم التي يمكن أن تحقق نفس النتيجة، مع التأكيد على أن append() تظل الخيار الأمثل والأكثر كفاءة ووضوحًا لهذه المهمة.

إن إتقان دالة append() يمثل خطوة أساسية لأي مبرمج بايثون، حيث تفتح الأبواب أمام بناء هياكل بيانات ديناميكية وتطبيقات أكثر مرونة. نأمل أن يكون هذا الدليل قد أضاف قيمة حقيقية لمعرفتك، وأن تتمكن الآن من استخدام append() بثقة وفعالية في مشاريعك البرمجية.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *