الفرق الأساسي بين append() وextend() في بايثون بسيط: الدالة append() تضيف قيمة واحدة إلى نهاية القائمة كعنصر واحد، حتى لو كانت هذه القيمة قائمة أخرى. أما extend() فتأخذ كائنًا قابلًا للتكرار Iterable وتضيف عناصره واحدًا واحدًا إلى القائمة الأصلية.
لذلك إذا كانت لديك القائمة [1, 2] وأضفت [3, 4] باستخدام append() فستحصل على قائمة متداخلة، بينما extend() تدمج العنصرين 3 و4 داخل القائمة. كلتا الدالتين تعدلان القائمة نفسها وتُرجعان None.
numbers = [1, 2]
numbers.append([3, 4])
print(numbers)
[1, 2, [3, 4]]
{getToc} $title={محتوى المقال}
ما الفرق بين append و extend في بايثون؟
| المقارنة | append() |
extend() |
|---|---|---|
| ماذا تضيف؟ | قيمة واحدة كعنصر واحد | عناصر Iterable واحدًا واحدًا |
| عند تمرير List | تضيف الـList كاملة كعنصر واحد | تضيف عناصر الـList إلى القائمة الأصلية |
| هل تعدل القائمة الأصلية؟ | نعم | نعم |
| القيمة المعادة | None |
None |
| الاستخدام المعتاد | إضافة عنصر واحد | إضافة عدة عناصر من كائن قابل للتكرار |
إذا كنت تحتاج شرحًا أوسع لبنية القوائم نفسها، راجع درس Lists في بايثون. هنا سنركز فقط على الفرق بين append() وextend().
كيف تعمل append()؟
استخدم append() عندما تريد إضافة عنصر واحد إلى نهاية القائمة. يمكن أن يكون هذا العنصر رقمًا أو نصًا أو قاموسًا أو Tuple أو List كاملة.
fruits = ["apple", "banana"]
fruits.append("cherry")
print(fruits)
['apple', 'banana', 'cherry']
ماذا يحدث عند append([3, 4])؟
إذا كانت القيمة نفسها قائمة، فإن append() لا تفك عناصرها. تضيف القائمة كاملة في موضع واحد:
numbers = [1, 2]
numbers.append([3, 4])
print(numbers)
[1, 2, [3, 4]]
أصبحت [3, 4] عنصرًا واحدًا داخل القائمة، ولذلك ظهرت List متداخلة.
كيف تعمل extend()؟
استخدم extend() عندما تريد إضافة عناصر كائن قابل للتكرار Iterable إلى القائمة واحدًا واحدًا. وأكثر حالة شائعة هي دمج عناصر List أخرى:
numbers = [1, 2]
numbers.extend([3, 4])
print(numbers)
[1, 2, 3, 4]
هنا لم تُضف [3, 4] كعنصر واحد؛ بل أضيف 3 ثم 4 إلى القائمة الأصلية.
append و extend في مثال واحد
with_append = [1, 2]
with_extend = [1, 2]
with_append.append([3, 4])
with_extend.extend([3, 4])
print("append:", with_append)
print("extend:", with_extend)
append: [1, 2, [3, 4]]
extend: [1, 2, 3, 4]
{alertInfo} القاعدة السريعة: استخدمappend()عندما تريد إضافة قيمة واحدة كعنصر واحد، واستخدمextend()عندما تريد إدخال عناصرIterableداخل القائمة.
ماذا يحدث مع String؟
النص String قابل للتكرار، لذلك extend() تتعامل معه حرفًا حرفًا:
letters = ["x"]
letters.extend("abc")
print(letters)
['x', 'a', 'b', 'c']
أما إذا أردت إضافة النص "abc" كاملًا كعنصر واحد، فاستخدم append():
letters = ["x"]
letters.append("abc")
print(letters)
['x', 'abc']
هل append() و extend() ترجعان قائمة جديدة؟
لا. كلتا الدالتين تعدلان القائمة الأصلية مباشرة، والقيمة المعادة منهما هي None. لذلك لا تخزن نتيجة الاستدعاء وتتوقع الحصول على List جديدة.
numbers = [1, 2]
result = numbers.append(3)
print(numbers)
print(result)
[1, 2, 3]
None
{alertWarning} لا تكتبnumbers = numbers.append(3)أوnumbers = numbers.extend([3, 4])؛ لأن المتغير سيصبحNone.
ماذا يحدث إذا استخدمت extend() مع قيمة غير قابلة للتكرار؟
extend() تحتاج Iterable. لذلك تمرير عدد صحيح مباشرةً مثل 5 يؤدي إلى TypeError:
numbers = [1, 2]
numbers.extend(5)
إذا أردت إضافة الرقم 5 كعنصر واحد، استخدم:
numbers.append(5)
ما الفرق بين extend() والعامل +؟
إذا كان لديك قائمتان، يمكن استخدام + أيضًا، لكن الفرق المهم هو أن extend() تعدل القائمة الموجودة، بينما التعبير list1 + list2 ينشئ List جديدة.
list1 = [1, 2]
list2 = [3, 4]
result = list1 + list2
print(list1)
print(result)
[1, 2]
[1, 2, 3, 4]
متى تستخدم append ومتى تستخدم extend؟
- استخدم
append()عندما لديك قيمة واحدة وتريد أن تصبح عنصرًا واحدًا داخل القائمة، سواء كانت رقمًا أو String أو Dict أو List كاملة. - استخدم
extend()عندما لديك مجموعة عناصر داخلIterableوتريد إضافتها إلى القائمة واحدًا واحدًا.
مثلًا، في مشروع قائمة المهام ببايثون تُستخدم append() لإضافة مهمة جديدة كعنصر واحد إلى قائمة المهام.
أخطاء شائعة عند استخدام append و extend
- توقع أن
append([3, 4])تدمج العناصر: النتيجة List متداخلة؛ استخدمextend()إذا أردت إضافة3و4منفصلين. - تخزين القيمة المعادة: الدالتان تعدلان القائمة وتعيدان
None. - استخدام
extend()مع String دون قصد: ستُضاف الحروف منفصلة. - تمرير Integer إلى
extend(): العدد ليسIterableوسيظهرTypeError.
تمرين سريع
ما الناتج المتوقع؟
items = ["A", "B"]
items.append(["C", "D"])
print(items)
إظهار الإجابة
['A', 'B', ['C', 'D']]
لأن append() أضافت القائمة ["C", "D"] كعنصر واحد.
روابط مفيدة
- شرح Lists في بايثون للمبتدئين
- مشروع قائمة مهام يستخدم append() عمليًا
- كورس أساسيات بايثون للمبتدئين
- توثيق Python الرسمي للقوائم
الخلاصة
append() تضيف قيمة واحدة كعنصر واحد، بينما extend() تضيف عناصر Iterable واحدًا واحدًا. كلتاهما تعدلان القائمة الأصلية وتعيدان None. إذا كنت محتارًا، اسأل نفسك: هل أريد إضافة الشيء نفسه كعنصر واحد، أم أريد إضافة العناصر الموجودة بداخله؟
{alertSuccess} عنصر واحد →append(). عناصر Iterable متعددة →extend().