عند تعلم القوائم Lists في Python ستقابل كثيرًا الدالتين append() و extend(). وفي البداية قد تبدوان متشابهتين، لأن الاثنين تُستخدمان لإضافة عناصر إلى القائمة.
لكن الحقيقة أن بينهما فرقًا مهمًا جدًا: append تضيف عنصرًا واحدًا كما هو، بينما extend تضيف عناصر كائن قابل للتكرار واحدًا واحدًا.
في هذا الدرس من بايثون العرب سنشرح الفرق بين append و extend بطريقة مبسطة، مع أمثلة عملية تساعدك على فهم متى تستخدم كل واحدة.
{getToc} $title={محتوى المقال}
{alertInfo} هذا الدرس مهم جدًا لكل مبتدئ يريد تعلم بايثون بالعربي، لأن الخلط بين append و extend من أكثر الأخطاء الشائعة عند التعامل مع Lists.
ما هي List في Python؟
القائمة List في Python هي نوع بيانات يسمح لك بتخزين أكثر من قيمة داخل متغير واحد.
مثال:
fruits = ["apple", "banana", "cherry"]
print(fruits)
الناتج:
['apple', 'banana', 'cherry']
القوائم مهمة جدًا في Python، ولهذا من الضروري أن تفهم طريقة إضافة العناصر إليها بشكل صحيح.
ما وظيفة append في Python؟
الدالة append() تستخدم لإضافة عنصر واحد إلى نهاية القائمة.
مثال بسيط:
fruits = ["apple", "banana"]
fruits.append("cherry")
print(fruits)
الناتج:
['apple', 'banana', 'cherry']
لاحظ أن cherry أُضيفت كعنصر جديد في نهاية القائمة.
{alertSuccess} استخدم append عندما تريد إضافة عنصر واحد فقط إلى نهاية القائمة.
ماذا يحدث إذا استخدمنا append مع قائمة؟
هنا تبدأ النقطة المهمة. إذا استخدمت append() لإضافة قائمة داخل قائمة أخرى، فإن Python سيضيف القائمة الثانية كعنصر واحد كامل.
numbers = [1, 2, 3]
numbers.append([4, 5])
print(numbers)
الناتج:
[1, 2, 3, [4, 5]]
لاحظ أن [4, 5] لم تُدمج مع القائمة الأصلية، بل أُضيفت كقائمة داخل القائمة.
يعني أصبح لدينا قائمة بداخل قائمة، وهذا قد يكون صحيحًا أحيانًا، لكنه ليس المطلوب دائمًا.
{alertWarning} إذا استخدمت append مع List، سيتم إدخال القائمة كاملة كعنصر واحد، وليس دمج عناصرها.
ما وظيفة extend في Python؟
الدالة extend() تستخدم لإضافة عناصر كائن قابل للتكرار إلى القائمة عنصرًا عنصرًا.
بمعنى أبسط: إذا أعطيتها قائمة ثانية، فإنها تدمج عناصر القائمة الثانية داخل القائمة الأولى.
numbers = [1, 2, 3]
numbers.extend([4, 5])
print(numbers)
الناتج:
[1, 2, 3, 4, 5]
هنا تم دمج 4 و 5 داخل القائمة الأصلية، ولم يتم إدخال القائمة الثانية كعنصر منفصل.
الفرق بين append و extend باختصار
| الدالة | ماذا تفعل؟ | متى أستخدمها؟ |
|---|---|---|
append() |
تضيف عنصرًا واحدًا كما هو في نهاية القائمة | عندما تريد إضافة قيمة واحدة أو عنصر واحد |
extend() |
تضيف عناصر iterable واحدًا واحدًا إلى القائمة | عندما تريد دمج قائمة أو مجموعة عناصر داخل قائمة |
مثال يوضح الفرق بوضوح
لنقارن بين الطريقتين في مثال واحد:
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 مع النصوص؟
نعم، لكن انتبه. النص في Python يعتبر كائنًا قابلًا للتكرار، لذلك extend ستضيف كل حرف كعنصر منفصل.
letters = ["A", "B"]
letters.extend("CD")
print(letters)
الناتج:
['A', 'B', 'C', 'D']
لأن النص "CD" يتكون من حرفين، أضافت extend كل حرف وحده.
{alertWarning} استخدام extend مع النصوص قد يعطيك نتيجة غير متوقعة إذا كنت تريد إضافة النص كاملًا كعنصر واحد.
ماذا لو استخدمنا append مع نص؟
إذا استخدمنا append مع نص، سيتم إضافة النص كاملًا كعنصر واحد.
letters = ["A", "B"]
letters.append("CD")
print(letters)
الناتج:
['A', 'B', 'CD']
هنا أضافت append النص "CD" كعنصر واحد، وهذا يوضح الفرق أكثر.
هل append و extend تغيران القائمة الأصلية؟
نعم، كل من append و extend تعدلان القائمة الأصلية نفسها، ولا تُرجعان قائمة جديدة.
مثال:
numbers = [1, 2]
result = numbers.append(3)
print(numbers)
print(result)
الناتج:
[1, 2, 3]
None
لاحظ أن append عدلت القائمة، لكنها أرجعت None.
{alertError} لا تكتب numbers = numbers.append(3)، لأن append ترجع None وليس القائمة الجديدة.
خطأ شائع جدًا مع append
من أكثر الأخطاء التي يقع فيها المبتدئون:
numbers = [1, 2]
numbers = numbers.append(3)
print(numbers)
الناتج:
None
السبب أن append لا تُرجع القائمة، بل تعدلها مباشرة.
الكود الصحيح:
numbers = [1, 2]
numbers.append(3)
print(numbers)
الناتج:
[1, 2, 3]
متى أستخدم append؟
استخدم append عندما تريد إضافة عنصر واحد فقط.
مثل:
- إضافة اسم طالب إلى قائمة الطلاب.
- إضافة رقم واحد إلى قائمة الأرقام.
- إضافة قاموس واحد داخل قائمة.
- إضافة قائمة داخل قائمة إذا كنت تريد Nested List.
students = ["Ahmed", "Sara"]
students.append("Omar")
print(students)
متى أستخدم extend؟
استخدم extend عندما تريد دمج عناصر متعددة داخل القائمة.
مثل:
- دمج قائمتين من الأسماء.
- إضافة مجموعة أرقام دفعة واحدة.
- إضافة عناصر Tuple إلى List.
- دمج نتائج قادمة من أكثر من مصدر.
students = ["Ahmed", "Sara"]
new_students = ["Omar", "Lina"]
students.extend(new_students)
print(students)
الناتج:
['Ahmed', 'Sara', 'Omar', 'Lina']
هل يمكن استخدام علامة + بدل extend؟
نعم، يمكن دمج قائمتين باستخدام علامة +، لكن هناك فرق بسيط.
list1 = [1, 2]
list2 = [3, 4]
result = list1 + list2
print(result)
الناتج:
[1, 2, 3, 4]
هنا تم إنشاء قائمة جديدة داخل result، بينما extend تعدل القائمة الأصلية مباشرة.
جدول مقارنة سريع
| السؤال | append | extend |
|---|---|---|
| هل تضيف عنصرًا واحدًا؟ | نعم | لا، تضيف عدة عناصر من iterable |
| ماذا يحدث عند تمرير List؟ | تضيف القائمة كاملة كعنصر واحد | تضيف عناصر القائمة واحدًا واحدًا |
| هل تغير القائمة الأصلية؟ | نعم | نعم |
| هل ترجع قائمة جديدة؟ | لا، ترجع None | لا، ترجع None |
تمرين بسيط
ما الناتج المتوقع من الكود التالي؟
items = ["A", "B"]
items.append(["C", "D"])
print(items)
الإجابة:
['A', 'B', ['C', 'D']]
لأن append أضافت القائمة كاملة كعنصر واحد.
ولو استخدمنا extend بدلًا منها:
items = ["A", "B"]
items.extend(["C", "D"])
print(items)
الناتج:
['A', 'B', 'C', 'D']
أسئلة شائعة
ما الفرق بين append و extend في Python؟
append تضيف عنصرًا واحدًا كما هو، أما extend فتضيف عناصر iterable واحدًا واحدًا إلى القائمة.
متى أستخدم append؟
استخدمها عندما تريد إضافة عنصر واحد إلى نهاية القائمة، مثل رقم أو نص أو قاموس أو حتى قائمة كعنصر مستقل.
متى أستخدم extend؟
استخدمها عندما تريد دمج عناصر قائمة أو Tuple أو أي iterable داخل القائمة الأصلية.
هل append ترجع القائمة بعد الإضافة؟
لا، append تعدل القائمة الأصلية وترجع None.
هل extend ترجع قائمة جديدة؟
لا، extend تعدل القائمة الأصلية أيضًا وترجع None.
روابط مهمة من بايثون العرب
- أساسيات بايثون 8: شرح القوائم Lists في Python
- بايثون بالمثال: حساب مجموع عناصر List في Python
- الفرق بين List و Tuple و Set و Dictionary في Python
مصدر خارجي مفيد
يمكنك الرجوع إلى توثيق Python الرسمي الخاص بالقوائم من هنا: Python Documentation - Data Structures.
الخلاصة
تعلمنا في هذا الدرس الفرق بين append و extend في Python، وعرفنا أن:
appendتضيف عنصرًا واحدًا كما هو.extendتضيف عناصر iterable عنصرًا عنصرًا.- الدالتان تعدلان القائمة الأصلية.
- الدالتان لا ترجِعان قائمة جديدة، بل ترجِعان
None.
إذا أردت إضافة عنصر واحد، استخدم append. وإذا أردت دمج عدة عناصر داخل القائمة، استخدم extend.
{alertSuccess} قاعدة بسيطة: append تضيف الشيء كما هو، أما extend فتفتح الشيء وتضيف عناصره واحدًا واحدًا.