الفرق بين append و extend في Python للمبتدئين مع أمثلة عملية

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

لكن الفرق بينهما مهم جدًا: append تضيف عنصرًا واحدًا كما هو، بينما extend تضيف عناصر الكائن القابل للتكرار واحدًا واحدًا. هذا الفرق البسيط قد يغيّر شكل القائمة بالكامل، وقد يسبب نتائج غير متوقعة إذا لم تنتبه له.

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

{getToc} $title={محتوى المقال}

{alertInfo} هذا الدرس مهم لكل مبتدئ في بايثون، لأن الخلط بين append و extend من أكثر الأخطاء الشائعة عند التعامل مع Lists.

إذا كنت جديدًا في القوائم، أنصحك بمراجعة درس: أساسيات بايثون 16: شرح Lists في Python للمبتدئين قبل متابعة هذا المقال.

ما هي List في Python؟

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

مثال:

fruits = ["apple", "banana", "cherry"]

print(fruits)

الناتج:

['apple', 'banana', 'cherry']

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

ما وظيفة append في Python؟

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

مثال بسيط:

fruits = ["apple", "banana"]

fruits.append("cherry")

print(fruits)

الناتج:

['apple', 'banana', 'cherry']

هنا أضافت append() العنصر "cherry" في نهاية القائمة.

{alertSuccess} استخدم append عندما تريد إضافة عنصر واحد فقط إلى نهاية القائمة.

ماذا يحدث إذا استخدمنا append مع قائمة؟

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

numbers = [1, 2, 3]

numbers.append([4, 5])

print(numbers)

الناتج:

[1, 2, 3, [4, 5]]

لاحظ أن [4, 5] لم يتم دمجها مع القائمة الأصلية، بل أصبحت عنصرًا واحدًا داخلها. هذا يسمى أحيانًا قائمة داخل قائمة أو Nested List.

{alertWarning} إذا استخدمت append مع List، سيتم إدخال القائمة كاملة كعنصر واحد، وليس دمج عناصرها داخل القائمة الأصلية.

ما وظيفة extend في Python؟

الدالة extend() تستخدم لإضافة عناصر كائن قابل للتكرار iterable إلى القائمة، عنصرًا عنصرًا.

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

numbers = [1, 2, 3]

numbers.extend([4, 5])

print(numbers)

الناتج:

[1, 2, 3, 4, 5]

هنا تم دمج الرقمين 4 و 5 داخل القائمة الأصلية كعناصر منفصلة.

الفرق بين append و extend باختصار

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

القاعدة المختصرة:

  • append تضيف الشيء كاملًا كما هو.
  • extend تفتح الشيء القابل للتكرار وتضيف عناصره واحدًا واحدًا.

مثال يوضح الفرق بين append و extend

لنقارن بين الطريقتين في مثال واحد:

list_one = [1, 2, 3]
list_two = [1, 2, 3]

list_one.append([4, 5])
list_two.extend([4, 5])

print("append:", list_one)
print("extend:", list_two)

الناتج:

append: [1, 2, 3, [4, 5]]
extend: [1, 2, 3, 4, 5]

في نتيجة append أصبحت [4, 5] عنصرًا واحدًا داخل القائمة. أما في نتيجة extend فقد تم دمج 4 و 5 كعناصر منفصلة.

هل يمكن استخدام extend مع النصوص؟

نعم، يمكن استخدام extend() مع النصوص، لكن انتبه جيدًا؛ لأن النص في Python يعتبر كائنًا قابلًا للتكرار، أي يمكن المرور على حروفه حرفًا حرفًا.

letters = ["A", "B"]

letters.extend("CD")

print(letters)

الناتج:

['A', 'B', 'C', 'D']

هنا أضافت extend() الحرف C ثم الحرف D، لأنها تعاملت مع النص كحروف منفصلة.

{alertWarning} استخدام extend مع النصوص قد يعطيك نتيجة غير متوقعة إذا كنت تريد إضافة النص كاملًا كعنصر واحد.

ماذا لو استخدمنا append مع نص؟

إذا استخدمنا append() مع نص، سيتم إضافة النص كاملًا كعنصر واحد.

letters = ["A", "B"]

letters.append("CD")

print(letters)

الناتج:

['A', 'B', 'CD']

هنا الفرق واضح: append أضافت النص كاملًا، بينما extend أضافت كل حرف وحده.

هل append و extend تغيران القائمة الأصلية؟

نعم. كل من append() و extend() تعدلان القائمة الأصلية مباشرة، ولا تُرجعان قائمة جديدة.

مثال:

numbers = [1, 2]

result = numbers.append(3)

print(numbers)
print(result)

الناتج:

[1, 2, 3]
None

لاحظ أن القائمة الأصلية تغيرت، لكن المتغير result أصبح None، لأن append() لا ترجع القائمة بعد التعديل.

{alertError} لا تكتب numbers = numbers.append(3)، لأن append ترجع None وليس القائمة الجديدة.

نفس الخطأ يحدث مع extend أيضًا

الدالة extend() أيضًا تعدل القائمة الأصلية وترجع None. لذلك لا تخزن نتيجتها في نفس المتغير.

كود خاطئ:

numbers = [1, 2]

numbers = numbers.extend([3, 4])

print(numbers)

الناتج:

None

الصحيح:

numbers = [1, 2]

numbers.extend([3, 4])

print(numbers)

الناتج:

[1, 2, 3, 4]

متى أستخدم append؟

استخدم append() عندما تريد إضافة عنصر واحد فقط إلى نهاية القائمة.

أمثلة مناسبة لاستخدام append():

  • إضافة اسم طالب واحد إلى قائمة الطلاب.
  • إضافة رقم واحد إلى قائمة الأرقام.
  • إضافة قاموس واحد داخل قائمة.
  • إضافة قائمة كاملة كعنصر واحد داخل قائمة أخرى.

مثال:

students = ["Ahmed", "Sara"]

students.append("Omar")

print(students)

الناتج:

['Ahmed', 'Sara', 'Omar']

متى أستخدم extend؟

استخدم extend() عندما تريد إضافة أكثر من عنصر دفعة واحدة إلى القائمة.

أمثلة مناسبة لاستخدام extend():

  • دمج قائمتين من الأسماء.
  • إضافة عدة أرقام دفعة واحدة.
  • إضافة عناصر Tuple إلى List.
  • دمج نتائج قادمة من أكثر من مصدر داخل قائمة واحدة.

مثال:

students = ["Ahmed", "Sara"]
new_students = ["Omar", "Lina"]

students.extend(new_students)

print(students)

الناتج:

['Ahmed', 'Sara', 'Omar', 'Lina']

هل يمكن استخدام علامة + بدل extend؟

نعم، يمكنك دمج قائمتين باستخدام علامة +، لكنها تختلف عن extend() في نقطة مهمة: علامة + تنشئ قائمة جديدة، بينما extend() تعدل القائمة الأصلية.

list1 = [1, 2]
list2 = [3, 4]

result = list1 + list2

print(result)

الناتج:

[1, 2, 3, 4]

إذا كنت تريد الحفاظ على القائمة الأصلية بدون تعديل، فقد تكون علامة + مناسبة. أما إذا كنت تريد تعديل القائمة نفسها، فاستخدم extend().

الفرق بين append و extend و +

الطريقة ماذا تفعل؟ هل تعدل القائمة الأصلية؟ متى تستخدمها؟
append() تضيف عنصرًا واحدًا كما هو نعم عند إضافة عنصر واحد فقط
extend() تضيف عناصر iterable واحدًا واحدًا نعم عند دمج عدة عناصر داخل القائمة
+ تدمج قائمتين وتنتج قائمة جديدة لا، إلا إذا خزنت الناتج في نفس المتغير عندما تريد إنشاء قائمة جديدة من قائمتين

جدول مقارنة سريع بين append و extend

السؤال append extend
هل تضيف عنصرًا واحدًا؟ نعم لا، تضيف عدة عناصر من iterable
ماذا يحدث عند تمرير List؟ تضيف القائمة كاملة كعنصر واحد تضيف عناصر القائمة واحدًا واحدًا
هل تغير القائمة الأصلية؟ نعم نعم
هل ترجع قائمة جديدة؟ لا، ترجع None لا، ترجع None
هل تصلح لإضافة نص كامل كعنصر؟ نعم لا غالبًا، لأنها تضيف حروف النص كعناصر

أخطاء شائعة عند استخدام append و extend

الخطأ الأول: توقع أن append تدمج عناصر القائمة

هذا الكود لا يدمج العناصر:

items = ["A", "B"]

items.append(["C", "D"])

print(items)

الناتج:

['A', 'B', ['C', 'D']]

إذا أردت دمج العناصر، استخدم extend():

items = ["A", "B"]

items.extend(["C", "D"])

print(items)

الناتج:

['A', 'B', 'C', 'D']

الخطأ الثاني: تخزين نتيجة append في نفس المتغير

هذا كود خاطئ:

numbers = [1, 2]

numbers = numbers.append(3)

print(numbers)

الناتج:

None

الصحيح:

numbers = [1, 2]

numbers.append(3)

print(numbers)

الخطأ الثالث: استخدام extend لإضافة نص كامل

إذا كتبت:

words = ["Python"]

words.extend("Code")

print(words)

ستكون النتيجة:

['Python', 'C', 'o', 'd', 'e']

إذا أردت إضافة النص كاملًا كعنصر واحد، استخدم append():

words = ["Python"]

words.append("Code")

print(words)

مثال عملي: قائمة طلاب

لنفترض أن لدينا قائمة طلاب، ونريد إضافة طالب واحد ثم إضافة مجموعة طلاب دفعة واحدة.

students = ["Ali", "Sara"]

# إضافة طالب واحد
students.append("Omar")

# إضافة عدة طلاب
students.extend(["Lina", "Mona"])

print(students)

الناتج:

['Ali', 'Sara', 'Omar', 'Lina', 'Mona']

هنا استخدمنا append() مع الطالب الواحد، واستخدمنا extend() مع قائمة الطلاب الجدد.

تمرين بسيط

ما الناتج المتوقع من الكود التالي؟

items = ["A", "B"]

items.append(["C", "D"])

print(items)

الإجابة:

['A', 'B', ['C', 'D']]

لأن append() أضافت القائمة كاملة كعنصر واحد.

جرّب الآن استبدال append بـ extend ولاحظ الفرق.

أسئلة شائعة عن append و extend

ما الفرق بين append و extend في Python؟

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

متى أستخدم append؟

استخدم append() عندما تريد إضافة عنصر واحد فقط، مثل رقم أو نص أو قاموس أو قائمة كاملة كعنصر مستقل.

متى أستخدم extend؟

استخدم extend() عندما تريد إضافة عدة عناصر إلى القائمة، مثل دمج قائمة أخرى أو Tuple داخل القائمة.

هل append ترجع القائمة بعد الإضافة؟

لا، append() تعدل القائمة الأصلية وترجع None.

هل extend ترجع قائمة جديدة؟

لا، extend() تعدل القائمة الأصلية أيضًا وترجع None.

هل يمكن استخدام + بدل extend؟

نعم، لكن علامة + تنشئ قائمة جديدة من دمج قائمتين، بينما extend() تعدل القائمة الأصلية مباشرة.

روابط مفيدة

الخلاصة

في هذا المقال تعلمنا الفرق بين append() و extend() في Python، وفهمنا أن الاختلاف بينهما يظهر بوضوح عند إضافة قائمة داخل قائمة أخرى.

  • append() تضيف عنصرًا واحدًا كما هو.
  • extend() تضيف عناصر iterable واحدًا واحدًا.
  • الدالتان تعدلان القائمة الأصلية.
  • الدالتان لا ترجعان قائمة جديدة، بل ترجعان None.
  • علامة + يمكن أن تدمج قائمتين لكنها تنشئ قائمة جديدة.
{alertSuccess} الخلاصة السريعة: إذا أردت إضافة عنصر واحد استخدم append، وإذا أردت دمج عدة عناصر داخل القائمة استخدم extend.

إرسال تعليق

أحدث أقدم