كيفية إزالة التكرارات من قائمة في Python

⚡ ملخص ذكي

إزالة العناصر المكررة من Python يمكن إنشاء القوائم باستخدام العديد من الأساليب المدمجة، بما في ذلك set() و dict.fromkeys() والحلقات وفهم القوائم وطرق المكتبة من NumPy و Pandas، حيث يوازن كل منها بين الحفاظ على الترتيب والسرعة.

  • 🔘 طريقة التعيين: تقوم الدالة set() بإرجاع العناصر المميزة على الفور ولكنها لا تحافظ على ترتيب القائمة الأصلي.
  • ☑️ تم الحفاظ على النظام: تقوم الدالة dict.fromkeys() و OrderedDict بإزالة التكرارات مع الاحتفاظ بـping ترتيب الإدخال الذي تم رصده أولاً.
  • التحكم اليدوي: تُحافظ حلقة التكرار أو فهم القائمة مع فحص العضوية على الترتيب وتظل قابلة للقراءة.
  • 🧪 طرق المكتبة: تقوم الدالة unique() في NumPy والدالة unique() في Pandas بإزالة البيانات المكررة وإرجاع قائمة الإخراج من خلال طريقة tolist().
  • 🛠️ حد قابلية التجزئة: تتطلب مفاتيح المجموعات والقواميس عناصر قابلة للتجزئة، لذا تحتاج القوائم أو القواميس إلى نهج قائم على الحلقات.
  • 🤖 سير عمل الذكاء الاصطناعي: تقوم مسارات التعلم الآلي بإزالة البيانات التدريبية المكررة باستخدام Pandas drop_duplicates() لمنع التحيز وتسريب البيانات.

إزالة العناصر المكررة من قائمة في Python

Python إزالة التكرارات من القائمة

القائمة عبارة عن حاوية تحتوي على عناصر مختلفة Python كائنات، والتي يمكن أن تكون أعدادًا صحيحة أو كلمات أو قيمًا وما إلى ذلك. وهي تعادل مصفوفة في لغات البرمجة الأخرى.

سنستعرض هنا طرقًا مختلفة لإزالة العناصر المكررة من قائمة معينة. Python.

الطريقة الأولى) إزالة التكرارات من القائمة باستخدام Set

لإزالة العناصر المكررة من قائمة، يمكنك استخدام الدالة المدمجة set(). تتميز هذه الدالة بأنها تُرجع عناصر فريدة.

لدينا قائمة: [1,1,2,3,2,2,4,5,6,2,1]. تحتوي القائمة على العديد من العناصر المكررة التي نحتاج إلى إزالتها لاستعادة العناصر المميزة فقط. يتم تمرير القائمة إلى الدالة المدمجة set(). Later يتم عرض القائمة النهائية باستخدام الدالة المدمجة list().

الناتج الذي نحصل عليه هو عناصر مميزة حيث يتم حذف جميع العناصر المكررة.

مثال

my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))

الإخراج:

[1, 2, 3, 4, 5, 6]

الطريقة الثانية) استخدام القائمة المؤقتة

لإزالة العناصر المكررة من قائمة معينة، يمكنك استخدام قائمة مؤقتة فارغة. للقيام بذلك، عليك أولاً المرور على القائمة التي تحتوي على عناصر مكررة وإضافة العناصر الفريدة إلى القائمة المؤقتة. Later يتم تعيين القائمة المؤقتة إلى القائمة الرئيسية.

مثال

إليك مثال عملي باستخدام قائمة مؤقتة.

my_list = [1, 2, 3, 1, 2, 4, 5, 4 ,6, 2]
print("List Before ", my_list)
temp_list = []

for i in my_list:
    if i not in temp_list:
        temp_list.append(i)

my_list = temp_list

print("List After removing duplicates ", my_list)

الإخراج:

List Before  [1, 2, 3, 1, 2, 4, 5, 4, 6, 2]
List After removing duplicates  [1, 2, 3, 4, 5, 6]

الطريقة الثالثة) استخدام الإملاء

يمكننا إزالة العناصر المكررة من القائمة المعطاة باستيراد OrderedDict من مكتبة collections. هذه المكتبة متوفرة في بايثون بدءًا من الإصدار 2.7. تتولى OrderedDict مهمة إرجاع العناصر المميزة بالترتيب الذي يظهر به المفتاح.

لنستخدم قائمة ونستخدم طريقة fromkeys() المتوفرة في OrderedDict للحصول على العناصر الفريدة من القائمة.

لاستخدام طريقة OrderedDict.fromkeys()، يجب عليك استيراد OrderedDict من collections، كما هو موضح أدناه:

from collections import OrderedDict

إليك مثال لإزالة التكرارات باستخدام طريقة OrderedDict.fromkeys().

مثال

from collections import OrderedDict

my_list = ['a','x','a','y','a','b','b','c']

my_final_list = OrderedDict.fromkeys(my_list)

print(list(my_final_list))

الإخراج:

['a', 'x', 'y', 'b', 'c']

من Python ابتداءً من الإصدار 3.5، يُمكننا استخدام الدالة `dict.fromkeys()` العادية لاستخراج العناصر المميزة من القائمة. تُعيد هذه الدالة مفاتيح فريدة، مما يُساعد على التخلص من القيم المُكررة.

فيما يلي مثال يوضح كيفية عمل الدالة dict.fromkeys() على قائمة للحصول على العناصر الفريدة:

مثال

my_list = ['a','x','a','y','a','b','b','c']
my_final_list = dict.fromkeys(my_list)
print(list(my_final_list))

الإخراج:

['a', 'x', 'y', 'b', 'c']

الطريقة الرابعة) استخدام الحلقة

باستخدام لحلقة، سنقوم باجتياز قائمة العناصر لإزالة التكرارات.

قم أولاً بتهيئة المصفوفة لتكون فارغة، أي myFinallist = []. داخل حلقة for، أضف شرطًا للتحقق مما إذا كانت العناصر الموجودة في القائمة موجودة في المصفوفة myFinallist. إذا لم تكن العناصر موجودة، فأضف العنصر إلى المصفوفة myFinallist باستخدام الدالة append().

لذا، عند مصادفة عنصر مكرر، سيكون موجودًا بالفعل في المصفوفة myFinallist ولن يتم إدراجه. دعونا الآن نتحقق من ذلك في المثال أدناه:

مثال

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinallist = []
for i in my_list:
    if i not in myFinallist:
myFinallist.append(i)
print(list(myFinallist))

الإخراج:

[1, 2, 3, 4, 5, 6]

الطريقة الخامسة) استخدام فهم القائمة

قائمة الفهم هي Python الوظائف المستخدمة لإنشاء تسلسلات جديدة (مثل القوائم والقواميس وما إلى ذلك) باستخدام التسلسلات التي تم إنشاؤها بالفعل. يساعدك هذا على تقليل الحلقات الأطول وتسهيل قراءة التعليمات البرمجية وصيانتها.

دعونا نستفيد من فهم القائمة لإزالة التكرارات من القائمة المقدمة.

مثال

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = []
[my_finallist.append(n) for n in my_list if n not in my_finallist]
print(my_finallist)

الإخراج:

[1, 2, 3, 4, 5, 6]

الطريقة السادسة: استخدام دالة unique() في NumPy

يمكن أن تساعدنا الدالة unique() من وحدة NumPy في إزالة العناصر المكررة من القائمة المعطاة.

للعمل مع NumPy، قم أولاً باستيراد وحدة numpy:

الخطوة 1) استيراد وحدة NumPy

import numpy as np

الخطوة 2) استخدم قائمتك التي تحتوي على عناصر مكررة داخل دالة unique(). سيتم تحويل الناتج مرة أخرى إلى قائمة باستخدام دالة tolist().

myFinalList = np.unique(my_list).tolist()

الخطوة 3) وأخيراً، اطبع القائمة:

print(myFinalList)

الكود النهائي مع الإخراج هو كما يلي:

import numpy as np
my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = np.unique(my_list).tolist()
print(myFinalList)

الإخراج:

[1, 2, 3, 4, 5, 6]

الطريقة 7) استخدام أساليب الباندا

تحتوي وحدة Pandas على طريقة فريدة () والتي ستمنحنا العناصر الفريدة من القائمة المعطاة.

للعمل مع وحدة Pandas:

الخطوة 1) استيراد وحدة الباندا

import pandas as pd

الخطوة 2) استخدم قائمتك التي تحتوي على عناصر مكررة داخل دالة unique():

myFinalList = pd.unique(my_list).tolist()

الخطوة 3) اطبع القائمة:

print(myFinalList)

الكود النهائي مع الإخراج هو كما يلي:

import pandas as pd

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = pd.unique(my_list).tolist()
print(myFinalList)

الإخراج:

[1, 2, 3, 4, 5, 6]

الطريقة الثامنة) استخدام التعداد () وفهم القائمة

نستخدم هنا مزيجًا من بناء القوائم ودالة enumerate() لإزالة العناصر المكررة. تُعيد دالة enumerate() كائنًا يحتوي على عداد لكل عنصر في القائمة، مثل (0,1)، (1,2)، وهكذا. القيمة الأولى هي الفهرس، والقيمة الثانية هي عنصر القائمة.

يتم فحص كل عنصر لمعرفة ما إذا كان موجودًا في القائمة، وإذا كان موجودًا، تتم إزالته من القائمة.

مثال

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = [i for j, i in enumerate(my_list) if i not in my_list[:j]]
print(list(my_finallist))

الإخراج:

[1, 2, 3, 4, 5, 6]

الأسئلة الشائعة

لا. المجموعة عبارة عن تجميع غير مرتب، لذا قد تُعيد الدالة set() العناصر بترتيب مختلف. لإزالة العناصر المكررة مع الحفاظ على الترتيب، استخدم dict.fromkeys() أو حلقة تكرارية تُضيف فقط العناصر التي لم تتم رؤيتها مسبقًا.

بالنسبة للقوائم الكبيرة، تُعدّ الدالة set() الأسرع عندما لا يكون الترتيب مهمًا لأن عمليات التحقق من العضوية تتم في زمن ثابت O(1). أما عندما يكون الترتيب مهمًا، فإن الدالة list(dict.fromkeys(my_list)) تكاد تكون بنفس السرعة وتحافظ على ترتيب الظهور الأول في سطر واحد.

تتطلب الدالتان set() و dict.fromkeys() عناصر قابلة للتجزئة، لذا فإنهما لا تعملان مع القوائم أو القواميس. يمكنك المرور على عناصر القائمة وإضافة العناصر غير الموجودة مسبقًا، أو تحويل كل عنصر إلى صف أو سلسلة JSON كمفتاح مؤقت.

استخدم list(dict.fromkeys(my_list)). بما أن Python تحافظ القواميس في الإصدار 3.7 على ترتيب الإدخال، لذا تبقى المفاتيح مرتبة حسب ترتيب ظهورها الأول. في الإصدارات السابقة، استخدم collections.OrderedDict.fromkeys() للحصول على النتيجة نفسها.

لا. تقوم دوال مثل set() و dict.fromkeys() و comprehensions و unique() في NumPy أو Pandas بإنشاء قائمة جديدة دون تغيير القائمة الأصلية. أعد تعيين النتيجة إلى نفس المتغير إذا كنت ترغب في استبدالها.

استخدم الدالة `numpy.unique()` أو `pandas.unique()` عندما تكون البيانات موجودة بالفعل في مصفوفات أو سلاسل، أو أثناء تحليل البيانات. لاحظ أن `numpy.unique()` تقوم أيضًا بترتيب القيم، بينما تحافظ `pandas.unique()` على ترتيب ظهورها الأول. استخدم الدالة `tolist()` للحصول على قائمة عادية.

تقوم مسارات التعلم الآلي بحذف الصفوف المكررة قبل التدريب، وذلك لتجنب تحيز النموذج أو تسرب البيانات بين مجموعتي التدريب والاختبار نتيجة تكرار العينات. وتُعدّ دالة drop_duplicates() في مكتبة Pandas أداة شائعة لتنظيف مجموعات البيانات الجدولية.

نعم. يقوم GitHub Copilot ومساعدو الذكاء الاصطناعي بإنشاء set() أو dict.fromkeys() أو كود إزالة التكرار Pandas من تعليق، ويقترحون خيار الحفاظ على الترتيب، ويعيدون هيكلة الحلقات، على الرغم من أنه لا يزال يتعين عليك التحقق من الحالات الشاذة مثل العناصر غير القابلة للتجزئة.

تلخيص هذه التدوينة بـ: