كيف يمكنك مقارنة قائمتين في بايثون؟

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

قارن بين قائمتين باستخدام sort()

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

للمقارنة، أولا سوف نتحقق مما إذا كان طول القوائم متساويا أم لا. إذا لم تكن الأطوال متساوية، فسيتم اعتبار القوائم مختلفة تلقائيًا.

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

# function to compare lists
def compare(l1, l2):
    # here l1 and l2 must be lists
    if len(l1) != len(l2):
        return False
    l1.sort()
    l2.sort()
    if l1 == l2:
        return True
    else:
        return False


list1 = [1, 2, 3, 4]
list2 = [1, 4, 3, 2]
list3 = [2, 3, 4, 5]
print("list1 is:",list1)
print("list2 is:",list2)
print("list3 is:",list3)

# comparing list1 and list 2
print("list1 and list2 contain same elements:",compare(list1, list2))
#comparing list2 and list3
print("list1 and list3 contain same elements:",compare(list1, list3))

و ستكون النتيجة:

list1 is: [1, 2, 3, 4]
list2 is: [1, 4, 3, 2]
list3 is: [2, 3, 4, 5]
list1 and list2 contain same elements: True
list1 and list3 contain same elements: False

المقارنة باستخدام المجموعات في بايثون

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

للمقارنة، أولا سوف نتحقق مما إذا كان طول القوائم متساويا أم لا. إذا لم تكن الأطوال متساوية، فسيتم وضع علامة على القوائم تلقائيًا على أنها مختلفة.

بعد ذلك، سنقوم بتحويل القوائم إلى مجموعات باستخدام set(). يمكننا مقارنة المجموعتين باستخدام العامل == للتحقق مما إذا كانت المجموعتان متساويتين أم لا. إذا كانت المجموعتان متساويتين، فسيتم إثبات أن كلتا القائمتين تحتويان على قيم متساوية. المثال التالي يوضح هذا المفهوم.

# function to compare lists
def compare(l1, l2):
    # here l1 and l2 must be lists
    if len(l1) != len(l2):
        return False
    set1 = set(l1)
    set2 = set(l2)
    if set1 == set2:
        return True
    else:
        return False


list1 = [1, 2, 3, 4]
list2 = [1, 4, 3, 2]
list3 = [2, 3, 4, 5]
print("list1 is:", list1)
print("list2 is:", list2)
print("list3 is:", list3)

# comparing list1 and list 2
print("list1 and list2 contain same elements:", compare(list1, list2))
# comparing list2 and list3
print("list1 and list3 contain same elements:", compare(list1, list3))

و ستكون النتيجة:

list1 is: [1, 2, 3, 4]
list2 is: [1, 4, 3, 2]
list3 is: [2, 3, 4, 5]
list1 and list2 contain same elements: True
list1 and list3 contain same elements: False

قارن بين قائمتين باستخدام عداد التردد

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

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

import collections
# function to compare lists
def compare(l1, l2):
    # here l1 and l2 must be lists
    if len(l1) != len(l2):
        return False
    counter1 = collections.Counter(l1)
    counter2=collections.Counter(l2)
    if counter1 == counter2:
        return True
    else:
        return False


list1 = [1, 2, 3, 4]
list2 = [1, 4, 3, 2]
list3 = [2, 3, 4, 5]
print("list1 is:", list1)
print("list2 is:", list2)
print("list3 is:", list3)

# comparing list1 and list 2
print("list1 and list2 contain same elements:", compare(list1, list2))
# comparing list2 and list3
print("list1 and list3 contain same elements:", compare(list1, list3))

و ستكون النتيجة:

list1 is: [1, 2, 3, 4]
list2 is: [1, 4, 3, 2]
list3 is: [2, 3, 4, 5]
list1 and list2 contain same elements: True
list1 and list3 contain same elements: False

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

في دالة compare() المستخدمة في الأمثلة، من الممكن أن يقوم المستخدم بتمرير كائنين آخرين بدلاً من القوائم. في مثل هذه الحالات، قد يحدث خطأ في البرنامج. لتجنب ذلك، يمكننا استخدام معالجة الاستثناءات لتجنب أخطاء وقت التشغيل عن طريق تطبيق التحقق من النوع باستخدام التابع type() في كتلة try-except للتحقق مما إذا كانت الكائنات التي تم تمريرها كوسائط هي قوائم.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

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

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading