الفرق بين append و extend في بايثون: متى تستخدم كل واحدة؟

الفرق الأساسي بين 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"] كعنصر واحد.

روابط مفيدة

الخلاصة

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

{alertSuccess} عنصر واحد → append(). عناصر Iterable متعددة → extend().

إرسال تعليق

أحدث أقدم