Python Programming

إزالة عناصر متعددة بكفاءة من قوائم بايثون

Spread the love

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

جدول المحتويات

الإزالة الشرطية باستخدام فهم القوائم

يوفر فهم القوائم حلاً أنيقاً وفعالاً في كثير من الأحيان لإزالة العناصر بناءً على شرط. يقوم بإنشاء قائمة جديدة تحتوي فقط على العناصر التي تحقق الشرط، مما يؤدي إلى تصفية القائمة الأصلية.


my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_list = [item for item in my_list if item % 2 != 0] 
print(f"القائمة الأصلية: {my_list}")
print(f"القائمة المفلترة (الأعداد الفردية فقط): {filtered_list}")

هذا يزيل الأعداد الزوجية بإيجاز. يمكن تكييف الشرط داخل فهم القائمة مع أي معايير.

الإزالة حسب نطاق الفهرس باستخدام التقطيع

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


my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# إزالة العناصر من الفهرس 2 إلى 4 (ضمنيًا)
new_list = my_list[:2] + my_list[5:]
print(f"القائمة الأصلية: {my_list}")
print(f"القائمة بعد إزالة العناصر 2-4: {new_list}")

هذا يزيل بكفاءة العناصر في المؤشرات 2 و 3 و 4.

الإزالة في الموقع باستخدام حلقة for

للتعديل في الموقع (تغيير القائمة الأصلية مباشرةً)، يمكن استخدام حلقة for مع كلمة المفتاح del. من المهم بشكل أساسي، التكرار في الترتيب العكسي لتجنب المشاكل المتعلقة بالفهرس الناتجة عن إزالة العناصر أثناء التكرار للأمام.


my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(len(my_list) - 1, -1, -1):
    if my_list[i] % 2 == 0:
        del my_list[i]
print(f"القائمة الأصلية: {my_list}")
print(f"القائمة بعد إزالة الأعداد الزوجية (في الموقع): {my_list}")

على الرغم من وظيفتها، إلا أن هذا النهج أقل كفاءة بشكل عام من فهم القوائم بالنسبة للقوائم الأكبر حجمًا.

الإزالة الشرطية باستخدام filter

توفر دالة filter() طريقة موجزة أخرى لتحقيق الإزالة الشرطية. إنها مفيدة بشكل خاص عند التعامل مع منطق تصفية أكثر تعقيدًا.


my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_list = list(filter(lambda x: x % 2 != 0, my_list))
print(f"القائمة الأصلية: {my_list}")
print(f"القائمة المفلترة (الأعداد الفردية فقط): {filtered_list}")

يستخدم هذا المثال دالة لامدا للاختصار، ولكن يمكنك استبدال أي دالة قابلة للدعوة تُرجع True أو False لكل عنصر.

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

اترك تعليقاً

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