5 طرق لإزالة العناصر المكررة من قوائم بايثون
نشرت: 2022-07-05في هذا البرنامج التعليمي ، ستتعلم كيفية إزالة العناصر المكررة من قوائم بايثون.
عندما تعمل مع القوائم في Python ، قد تحتاج أحيانًا إلى العمل مع العناصر الفريدة فقط في القائمة - عن طريق إزالة التكرارات.
هناك عدة طرق مختلفة للقيام بذلك. في هذا البرنامج التعليمي ، سنستعرض خمس تقنيات من هذا القبيل.
أساسيات قوائم بايثون
لنبدأ مناقشتنا بمراجعة أساسيات قوائم بايثون.
قوائم بايثون قابلة للتغيير. حتى تتمكن من تعديلها في مكانها عن طريق إضافة وإزالة العناصر من القائمة. بالإضافة إلى ذلك ، قوائم بايثون هي مجموعات من العناصر ليست بالضرورة فريدة.
إذن كيف تحتفظ فقط بالعناصر الفريدة وتزيل العناصر المكررة أو المكررة؟
حسنًا ، يمكنك القيام بذلك بعدة طرق مختلفة. يمكنك إما إنشاء قائمة جديدة تحتوي فقط على العناصر الفريدة في القائمة الأصلية. أو يمكنك اختيار تعديل القائمة الأصلية في مكانها وإزالة العناصر المكررة.
سوف نتعلم هذه بالتفصيل في هذا البرنامج التعليمي.
طرق إزالة التكرارات من قوائم بايثون
لنأخذ مثالاً من العالم الحقيقي. افترض أنك في حفلة عيد ميلاد صديقك.
في مجموعة الحلويات المعروضة ، ترى أن هناك بعض الأصناف المتكررة. تريد الآن إزالة تلك العناصر المكررة من قائمة الحلويات.

لنقم بإنشاء قائمة sweets
تحتوي على جميع العناصر الموجودة في الصورة أعلاه.
sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]
في قائمة sweets
أعلاه ، تتكرر العناصر "حلوى" و "كب كيك" مرتين. دعنا نستخدم قائمة الأمثلة هذه لإزالة العناصر المكررة.
كرر عبر قوائم Python لإزالة التكرارات
الطريقة الأكثر مباشرة هي إنشاء قائمة جديدة تحتوي على كل عنصر مرة واحدة بالضبط.
اقرأ خلية الشفرة أدناه:
unique_sweets = [] for sweet in sweets: if sweet not in unique_sweets: unique_sweets.append(sweet) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
- نقوم بتهيئة قائمة فارغة
unique_sweets
. - أثناء تصفح
sweets list
، نصل إلى كلsweet
. - إذا لم تكن
sweet
موجودة بالفعل في قائمةunique_sweets
، فإننا نضيفها إلى نهاية قائمة الحلويات الفريدة باستخدام طريقةunique_sweets
.append()
.
لنفترض أنك صادفت عنصرًا متكررًا ، على سبيل المثال ، التكرار الثاني لـ "حلوى" في قائمة sweets
. لم تتم إضافة هذا إلى قائمة unique_sweets
لأنه موجود بالفعل: sweet not in unique_sweets
تقييمه إلى False
للظهور الثاني لـ "كب كيك" و "حلوى".
لذلك ، في هذه الطريقة ، يظهر كل عنصر مرة واحدة بالضبط في قائمة unique_sweets
- دون أي تكرار.
استخدم List Comprehension لإزالة التكرارات
يمكنك أيضًا استخدام قائمة الفهم لملء قائمة unique_sweets
.
هل تريد تحديث أساسيات فهم القائمة؟
️ تحقق من البرنامج التعليمي حول قائمة الفهم في بايثون.
دعنا نستخدم تعبير list comprehension: [إخراج العنصر in iterable if condition is True] لإعادة كتابة التكرار أعلاه بإيجاز.
unique_sweets = [] [unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets] print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
على الرغم من أنك تقوم بإنشاء قائمة جديدة ، فإنك لا تقوم بملء القائمة التي تم إنشاؤها بالقيم. هذا لأن الإخراج هو العملية. .append()
إلى قائمة unique_sweets
.
لإزالة العناصر المكررة من قوائم Python ، يمكنك أيضًا استخدام طرق القائمة المضمنة ، وسنغطي ذلك في القسم التالي.
استخدم أساليب القائمة المضمنة لإزالة التكرارات
يمكنك استخدام أساليب قائمة Python .count()
و .remove()
لإزالة العناصر المكررة.
- باستخدام بناء الجملة list.count (القيمة) ، ترجع طريقة
.count()
عدد مرات ظهورvalue
فيlist
. لذلك سيكون العدد المقابل للعناصر المكررة أكبر من 1.- list.remove (القيمة) يزيل التواجد الأول للقيمة من القائمة.
باستخدام ما سبق ، لدينا الكود التالي.
for sweet in sweets: # check if the count of sweet is > 1 (repeating item) if sweets.count(sweet) > 1: # if True, remove the first occurrence of sweet sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
نظرًا لأن طريقة .remove()
تزيل التواجد الأول لقيمة فقط ، فلا يمكنك استخدامها لإزالة العناصر التي تحدث أكثر من مرتين.
- إذا تم تكرار عنصر معين (يحدث مرتين بالضبط) ، فإن هذه الطريقة تزيل التكرار الأول.
- إذا تم تكرار عنصر معين
K
مرة ، فبعد تشغيل الكود أعلاه ، ستظل عمليات التكرارK-1
.
لكن بشكل عام ، عندما نقول مكررات ، فإننا نشير عادةً إلى جميع التكرارات.

للتعامل مع هذه الحالة ، يمكنك تعديل الحلقة أعلاه لإزالة جميع التكرارات باستثناء مرة واحدة. بدلاً من استخدام شرط if
للتحقق من عدد عنصر معين ، يمكنك تشغيل حلقة while
لإزالة التكرار بشكل متكرر حتى يصبح عدد كل عنصر في القائمة 1.
تحتوي قائمة sweets
الآن على مكررين لـ "كب كيك" و 3 تكرارات "حلوى".
sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]
يمكنك استخدام حلقة while
loop لإزالة التكرار ، كما هو موضح أدناه. تستمر الحلقة while في العمل طالما أن عدد الحلويات في الحلويات أكبر من 1. عندما يتبقى تكرار واحد فقط ، فإن الحالة sweets.count (sweet)> 1 تصبح خطأ ، وتتخطى الحلقة إلى العنصر التالي.
for sweet in sweets: # check if the count of sweet is > 1 (repeating item) while(sweets.count(sweet) > 1): # repeatedly remove the first occurrence of sweet until one occurrence remains. sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']
لكن استخدام الحلقات المتداخلة قد لا يكون فعالًا للغاية ، لذلك يمكنك التفكير في استخدام إحدى التقنيات الأخرى التي تمت مناقشتها إذا كنت تعمل مع قوائم كبيرة.
لقد تعلمنا حتى الآن ما يلي:
- طرق إزالة العناصر المكررة من قوائم Python - عن طريق إنشاء قوائم جديدة - تحتوي على عناصر فريدة فقط
- أساليب القائمة
.count()
و..remove()
لتعديل القائمة في مكانها
هناك بعض هياكل البيانات المضمنة في Python والتي تتطلب أن تكون جميع القيم فريدة - دون تكرار. لذلك ، يمكننا إرسال قائمة Python إلى إحدى هياكل البيانات هذه لإزالة التكرارات. ثم قم بتحويلها مرة أخرى إلى قائمة. سنتعلم كيفية القيام بذلك في الأقسام القادمة.
صب قائمة Python في مجموعة لإزالة التكرارات
مجموعات Python هي مجموعات من العناصر الفريدة من نوعها . لذلك ، فإن عدد العناصر الموجودة في المجموعة (المعطاة بواسطة len(<set-obj>
) يساوي عدد العناصر الفريدة الموجودة.
يمكنك تحويل أي لغة بايثون قابلة للتكرار إلى مجموعة باستخدام الصيغة:
set(iterable)
.
الآن ، دعنا نضع قائمة الحلويات في مجموعة ونفحص المخرجات.
set(sweets) # Output {'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}
من الإخراج في خلية الكود أعلاه ، نرى أن كل عنصر يظهر مرة واحدة بالضبط ، وتمت إزالة التكرارات.
لاحظ أيضًا أن ترتيب العناصر ليس بالضرورة هو نفسه ترتيبها في القائمة الأصلية للحلويات. هذا لأنه ، إلى جانب كونه مجموعة من العناصر الفريدة ، فإن كائن مجموعة Python هو مجموعة غير مرتبة .
الآن بعد أن أزلنا التكرارات عن طريق تحويل القائمة إلى مجموعة ، يمكننا تحويلها مرة أخرى إلى قائمة ، كما هو موضح أدناه.
unique_sweets = list(set(sweets)) print(unique_sweets) # Output ['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']
استخدم عناصر القائمة كمفاتيح قاموس لإزالة التكرارات
قاموس Python عبارة عن مجموعة من أزواج المفتاح والقيمة حيث تحدد المفاتيح القيم بشكل فريد.
يمكنك إنشاء قاموس Python باستخدام طريقة .fromkeys()
dict.fromkeys(keys, values)
: هنا ، keys
values
هي عناصر متكررة تحتوي على مفاتيح وقيم القاموس ، على التوالي.
-
keys
هي معلمة مطلوبة ، ويمكن أن تكون أي لغة Python قابلة للتكرار تتوافق مع مفاتيح القاموس. -
values
هي معلمة اختيارية . إذا لم تحدد القيم القابلة للتكرار ، فسيتم استخدام القيمة الافتراضية لـNone
.
بدون تحديد القيم ، dict.fromkeys(sweets)
قاموس Python حيث يتم تعيين القيم على None
- القيمة الافتراضية. تشرح خلية الشفرة أدناه هذا.
dict.fromkeys(sweets) # Output {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}
كما هو الحال مع القسم السابق ، يمكننا مرة أخرى تحويل القاموس إلى قائمة ، كما هو موضح أدناه.
unique_sweets = list(dict.fromkeys(sweets)) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
من الناتج أعلاه ، يمكننا أن نرى أنه تمت إزالة العناصر المكررة من قائمة sweets
.
تلخيص لما سبق
فيما يلي ملخص للطرق المختلفة التي يمكنك استخدامها لإزالة العناصر المكررة أو التكرارات من قوائم بايثون.
- استخدم طريقة قائمة Python . append () لإضافة عناصر غير متكررة إلى قائمة جديدة. تحتوي القائمة الجديدة على كل عنصر في القائمة الأصلية مرة واحدة بالضبط وتزيل جميع التكرارات. يمكنك أيضًا القيام بذلك باستخدام قائمة الفهم.
- استخدم أساليب .count () و .remove () المضمنتين لإزالة العناصر التي تحدث مرتين بالضبط. يمكن وضع نفس الشيء في حلقة while لإزالة كل التكرارات الإضافية.
- ضع قائمة بايثون في مجموعة للاحتفاظ بالعناصر الفريدة فقط.
- استخدم dict.fromkeys (قائمة) لإزالة أي نسخ مكررة من القائمة حيث يجب ألا يكون هناك مفاتيح تكرار في القاموس.
بعد ذلك ، تحقق من مشاريع Python للتدرب والتعلم. أو تعرف على كيفية العثور على فهرس عنصر في قوائم بايثون. تعلم سعيد!